JAXB Unmarshalling - 未找到具有默认根元素的描述符...

我在将 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) );

抛出异常


[异常 [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>

任何帮助,将不胜感激。谢谢!


达令说
浏览 94回答 1
1回答

12345678_0001

您的错误说明了很多:异常描述:在项目中未找到具有默认根元素 { http://tripos.vantiv.com/2014/09/TriPos.Api }selectionResponse 的描述符]xmlns您的 xml 中的默认值是:&nbsp; xmlns="http://tripos.vantiv.com/2014/09/TriPos.Api">它不能被“猜测”,因此将命名空间添加到您的根元素声明中,例如:@XmlRootElement(name = "selectionResponse",&nbsp; &nbsp; namespace="http://tripos.vantiv.com/2014/09/TriPos.Api")@XmlAccessorType(XmlAccessType.FIELD)public static class SelectionResponse {...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java