Java Jaxb解组返回空对象

Java Jaxb解组返回空对象,java,xml,jaxb,unmarshalling,pojo,Java,Xml,Jaxb,Unmarshalling,Pojo,我有非常有趣的xml,我正在尝试将此xml转换为pojo。在我的jaxb解组它的返回空对象之后 以下是xml: 1105 1111 真的 我的POJO: import javax.xml.bind.annotation.XmlAccessType; 导入javax.xml.bind.annotation.XmlAccessorType; 导入javax.xml.bind.annotation.xmlement; 导入javax.xml.bind.annotation.XmlRootElem

我有非常有趣的xml,我正在尝试将此xml转换为pojo。在我的jaxb解组它的返回空对象之后

以下是xml:


1105
1111

真的
我的POJO:

import javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=“ServiceResultOfArrayOfstringuHEDJ7Dj”,命名空间=”http://schemas.datacontract.org/2004/07/HotelWeb.SanAdminSite.RestWebApi.App_Data")
公共类PostSendLogIdServiceXmlResult{
私有字符串xmlns;
@xmlement(name=“InfoMessage”)
私有字符串消息;
@xmlement(name=“Error”)
私有错误;
@xmlement(name=“Data”)
私有PostSendLogIdData数据;
@XmlElement(name=“IsSuccessful”)
私有布尔值成功;
公共字符串getXmlns(){
返回xmlns;
}
公共无效集合xmlns(字符串xmlns){
this.xmlns=xmlns;
}
公共字符串getInfoMessage(){
返回信息消息;
}
public void setInfoMessage(字符串infoMessage){
this.infoMessage=infoMessage;
}
公共错误getError(){
返回误差;
}
公共无效设置错误(错误){
this.error=错误;
}
公共PostSendLogIdData getData(){
返回数据;
}
公共void setData(PostSendLogIdData){
这个数据=数据;
}
公共布尔值isSuccessful(){
返回成功;
}
public void setSuccessful(布尔值成功){
isSuccessful=成功;
}
@凌驾
公共字符串toString(){
返回“PostSendLogIdServiceXmlResult{”+
“xmlns=”+xmlns+'\''+
“,infoMessage='”+infoMessage+'\''+
“,error=“+error”+
“,data=“+数据”+
“,isSuccessful=“+isSuccessful+
'}';
}
}
import javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name=“Error”)
@XmlAccessorType(XmlAccessType.FIELD)
公共类PostSendLogIdError{
@xmlement(name=“Code”)
私有字符串码;
@xmlement(name=“Message”)
私有字符串消息;
公共字符串getCode(){
返回码;
}
公共无效设置码(字符串码){
this.code=代码;
}
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
}
import javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入java.util.array;
@XmlRootElement(name=“Data”,命名空间=”http://schemas.microsoft.com/2003/10/Serialization/Arrays")
@XmlAccessorType(XmlAccessType.FIELD)
公共类PostSendLogIdData{
@xmlement(name=“string”)
私有字符串[]postSendLogIds;
私有字符串_xmlns;
公共字符串[]getPostSendLogIds(){
返回postSendLogIds;
}
public void setPostSendLogIds(字符串[]postSendLogIds){
this.postSendLogIds=postSendLogIds;
}
公共字符串get_xmlns(){
返回xmlns;
}
公共无效集(字符串){
这个;
}
@凌驾
公共字符串toString(){
返回“PostSendLogIdData{”+
“postSendLogIds=“+Arrays.toString(postSendLogIds))+
“,\u xmlns=”+\u xmlns+“\”+
'}';
}
}
以及我的Jaxb转换实现:

context=JAXBContext.newInstance(PostSendLogIdServiceXmlResult.class);
Unmarshaller Unmarshaller=context.createUnmarshaller();
PostSendLogIdServiceXmlResult解组器=(PostSendLogIdServiceXmlResult)解组器。解组器(新StringReader(响应));
在此之后,我将获得新的
PostSendLogIdServiceXmlResult
对象,其中包含空值

你能给我一些建议吗


提前感谢。

再次查看XML。命名空间不应用于
元素,而是应用于
子元素。注意
d2p1:
前缀的应用位置

另外,
不是根元素,因此整个
@XmlRootElement(name=“Data”,…
注释是未使用的,即不必要的,并且似乎会让您感到困惑,因此我建议从
PostSendLogIdData
类中删除注释

正确的用法是:

@xmlement(name=“string”,名称空间=”http://schemas.microsoft.com/2003/10/Serialization/Arrays")
私有字符串[]postSendLogIds;

从PostSendLogIdData中删除XmlRootElement注释并将名称空间添加到postSendLogIds后,我仍然得到相同的结果。(空模型)@AygünBozdemir可能是因为您在所有元素中都缺少名称空间。您可能应该在包级别声明主名称空间,这样您就不必重复它了。--我发现,在生成XML时,查找这样的映射错误要容易得多,因此您可以看到JAXB如何解释注释的组合ns给定。一旦输出与要分析的输入匹配,就需要注释,然后分析应该可以正常工作。实际上,我真的没有得到它。:(我已经为包级别声明了一个命名空间。@XmlRootElement(name=“servicesultofarrayofstringuhedj7dj”,namespace=“))@AygünBozdemir No,仅为该元素声明了名称空间。问题中的XML为所有元素声明了名称空间,但没有前缀(
XML)