在将api xml响应解组到我创建的POJO时遇到问题。
我确定JAXB上下文知道我的课程,因为我能够正确地编组它。
POJO
package com.bnh.element.misc.Requests;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "selectionResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class SelectionResponse {
@XmlElement
boolean _hasErrors;
@XmlElement
int selectionIndex;
@XmlElement
String type;
}
试图解组:
Object response = JAXB_CONTEXT.createUnmarshaller()
.unmarshal( new StringReader(xml) );
引发异常
[Exception [EclipseLink-25008](Eclipse Persistence Services-2.6.4.v20160829-44060b6):org.eclipse.persistence.exceptions.XMLMarshalException 异常描述:在项目中找不到带有默认根元素{http://tripos.vantiv.com/2014/09/TriPos.Api} selectionResponse的描述符] 在org.eclipse.persistence.jaxb.JAXBUnmarshaller.handleXMLMarshalException(JAXBUnmarshaller.java:1110)
API的实际响应:
<selectionResponse
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://tripos.vantiv.com/2014/09/TriPos.Api">
<_errors />
<_hasErrors>false</_hasErrors>
<_links />
<_logs
xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:type="Logs" />
<_type>selectionResponse</_type>
<_warnings />
<selectionIndex>0</selectionIndex>
</selectionResponse>
将对象编组后生成的字符串:
<selectionResponse
xmlns:ns0="http://tripos.vantiv.com/2014/09/TriPos.Api">
<_hasErrors>false</_hasErrors>
<selectionIndex>0</selectionIndex>
</selectionResponse>
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
您的错误说明很多:
异常描述:在项目中找不到带有默认根元素{http://tripos.vantiv.com/2014/09/TriPos.Api} selectionResponse的描述符]
您的xml中的默认xmlns
是:
xmlns="http://tripos.vantiv.com/2014/09/TriPos.Api">
它不能被“迷惑”,因此将名称空间添加到您的根元素声明中,例如:
@XmlRootElement(name = "selectionResponse",
namespace="http://tripos.vantiv.com/2014/09/TriPos.Api")
@XmlAccessorType(XmlAccessType.FIELD)
public static class SelectionResponse {
...