簡體   English   中英

無法使用Jaxb從XML提取值

[英]Not able to extract Values from XML using Jaxb

我正在嘗試使用Jaxb從XML對象中提取對象之一。 它不會返回任何錯誤日志。 但是,它返回一個空對象。 請找到代碼。 請僅用Jaxb通知我(不使用Documentbuilder方式)

XML字符串(ResponseXML)

 <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>

數據包

 @XmlAccessorType(XmlAccessType.NONE)
 @XmlRootElement(name = "DATAPACKET")
 public class DataPacket {    

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

 public DataPacket (){}

 // Setter and getter of Body  

 }

身體

@XmlAccessorType(XmlAccessType.NONE)
public class Body{    

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

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

ErrorListDto

 @XmlAccessorType(XmlAccessType.NONE)
 public class ErrorListDto{    

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

 public ErrorListDto(){}

 // Setter and getter of errorCodes   
 }

ErrorCodesDto

@XmlAccessorType(XmlAccessType.NONE)
public class ErrorCodesDto {

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

public ErrorCodesDto() {}

我提取值如下

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

請讓我知道這里出了什么問題。 任何想法將不勝感激。

如下更改您的ErrorCodesDto ,它將起作用:

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”應包含

 <ERROR-LIST>
        <ERROR-CODE><ERROR-CODE>107</ERROR-CODE></ERROR-CODE>
</ERROR-LIST>

為了回答您的評論,該代碼甚至可以與以下xml一起使用

<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>

編輯

您也可以通過將ErrorListDto更改為不具有ErrorCodesDto類來實現此ErrorListDto

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM