xml post body中的xmlns会导致Jaxb进行不正确的反序列化

时间:2014-02-03 20:49:43

标签: java xml rest jaxb

我正在尝试编写一个读取xml post请求的Spring控制器。发布的xml的根元素如下所示:

<booksMessage version="2.0" notificationDate="2013-10-17T00:15:00-08:00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="books:notification:v2.0">

我表示该元素的java类开头如下:

@XmlRootElement(name="booksMessage", namespace="books:notification:v2.0")
@XmlAccessorType(XmlAccessType.FIELD)
public class BooksMessage {

当我尝试用这样的Jmeter发出那个帖子请求时,该对象被翻译为空。如果我从发布的邮件中删除xmlns="books:notification:v2.0,并从我的java注释中删除namespace="books:notification:v2.0",则效果很好。但是,我无法控制正在发布的消息,因此当xml帖子包含xmlns时,如何使其正常工作?我还需要添加一些其他注释吗?

1 个答案:

答案 0 :(得分:0)

根元素位于books:notification:v2.0命名空间中,但其所有子元素都在默认命名空间中,因此显然它们从未显示过。我必须在包级别指定命名空间,并添加elementFormDefault=XmlNsForm.QUALIFIED,以便所有包含的元素将自动具有正确的命名空间。

为此,我在包中创建了一个名为“package-info.java”的文件:

@ javax.xml.bind.annotation.XmlSchema(         命名空间=“书籍:通知:V2.0”         将elementFormDefault = XmlNsForm.QUALIFIED         ) package com.company.models.books; import javax.xml.bind.annotation.XmlNsForm;