首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Jaxb从XML中提取值

无法使用Jaxb从XML中提取值
EN

Stack Overflow用户
提问于 2017-10-02 05:49:29
回答 1查看 235关注 0票数 0

我正在尝试使用Jaxb从XML对象中提取其中一个对象。它不会随任何错误日志返回。但是,它返回一个空对象。请找到密码。请只告诉我Jaxb(不是Documentbuilder )

XML字符串(ResponseXML)

代码语言:javascript
复制
 <DATAPACKET REQUEST-ID = "4">
 <HEADER>
     <RESPONSE-TYPE CODE = "0" DESCRIPTION = "Response Error" />
 </HEADER>
 <BODY>
     <ERROR-LIST>
        <ERROR-CODE>107</ERROR-CODE>
     </ERROR-LIST>
 </BODY>
 </DATAPACKET>

DataPacket

代码语言:javascript
复制
 @XmlAccessorType(XmlAccessType.NONE)
 @XmlRootElement(name = "DATAPACKET")
 public class DataPacket {    

 @XmlElement(name ="BODY")
 private Body BODY;

 public DataPacket (){}

 // Setter and getter of Body  

 }

正文

代码语言:javascript
复制
@XmlAccessorType(XmlAccessType.NONE)
public class Body{    

@XmlElement(name ="ERROR-LIST")
private ErrorListDto errorList;

 public Body(){}
 // Setter and getter of errorList
 }

ErrorListDto

代码语言:javascript
复制
 @XmlAccessorType(XmlAccessType.NONE)
 public class ErrorListDto{    

 @XmlElement(name="ERROR-CODE")
 private List<ErrorCodesDto> errorCodes;

 public ErrorListDto(){}

 // Setter and getter of errorCodes   
 }

ErrorCodesDto

代码语言:javascript
复制
@XmlAccessorType(XmlAccessType.NONE)
public class ErrorCodesDto {

@XmlElement(name = "ERROR-CODE")
private String ERROR_CODE;

public ErrorCodesDto() {}

I按以下方式提取值

代码语言:javascript
复制
JAXBContext jc = JAXBContext.newInstance(DataPacket.class);
 Unmarshaller unmarshaller = jc.createUnmarshaller();
 StringReader reader = new StringReader(responseXML);
 DataPacket dp = (DataPacket) unmarshaller.unmarshal(reader);                       
 Body body = dp.getBODY();
 ErrorListDto errorList = body.getErrorList();
 System.out.println(errorList.toString()); --> Here it has error code as null

请告诉我这里出了什么问题。任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-02 06:36:45

更改您的ErrorCodesDto如下,它将工作:

代码语言:javascript
复制
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlValue;

@XmlAccessorType(XmlAccessType.NONE)
public class ErrorCodesDto {

    @XmlValue
    private String ERROR_CODE;

    public ErrorCodesDto() {
    }

}

否则,您期望的"xml“将包含

代码语言:javascript
复制
 <ERROR-LIST>
        <ERROR-CODE><ERROR-CODE>107</ERROR-CODE></ERROR-CODE>
</ERROR-LIST>

要回答您的注释,代码甚至可以使用以下xml

代码语言:javascript
复制
<DATAPACKET REQUEST-ID = "4">
 <HEADER>
     <RESPONSE-TYPE CODE = "0" DESCRIPTION = "Response Error" />
 </HEADER>
 <BODY>
     <ERROR-LIST>
        <ERROR-CODE>107</ERROR-CODE>
        <ERROR-CODE>108</ERROR-CODE>
        <ERROR-CODE>109</ERROR-CODE>
     </ERROR-LIST>
 </BODY>
 </DATAPACKET>

编辑

您也可以在没有ErrorCodesDto类的情况下实现这一点,只需将ErrorListDto更改为

代码语言:javascript
复制
@XmlElement(name = "ERROR-CODE") 
private List<String> errorCodes; 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46520113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档