2017-04-12 137 views
0

我試圖來解讀這種XML的:JAXB和解組XML具有相同的標籤名稱但不同的結構

<result> 
    <avance>0.0000</avance> 
    <operation_status>0</operation_status> 
    <service>Bank Account</service> 
    <service> 
     <min_amount>1.00</min_amount> 
     <max_amount>1499.00</max_amount> 
     <currency>USD</currency> 
    </service> 
</result> 

我創建這種類型結構:

public class Result { 

    private BigDecimal avance; 

    private Integer operationStatus; 

    private String serviceDesc; 

    private Service service; 

    @XmlElement(name = "service") 
    public String getServiceDesc() { 
     return serviceDesc; 
    } 

    public void setServiceDesc(String serviceDesc) { 
     this.serviceDesc = serviceDesc; 
    } 

    @XmlElement(name = "service") 
    public Service getService() { 
     return service; 
    } 

    public void setService(Service service) { 
     this.service = service; 
    } 

    @XmlElement(name = "avance") 
    public BigDecimal getAvance() { 
     return avance; 
    } 

    public void setAvance(BigDecimal avance) { 
     this.avance = avance; 
    } 

    @XmlElement(name = "operation_status") 
    public Integer getOperationStatus() { 
     return operationStatus; 
    } 

    public void setOperationStatus(Integer operationStatus) { 
     this.operationStatus = operationStatus; 
    } 
} 

Service外觀像這樣:

@XmlRootElement 
public class Service { 

    private BigDecimal minAmount; 

    private BigDecimal maxAmount; 

    private String currency; 

    @XmlElement(name = "min_amount") 
    public BigDecimal getMinAmount() { 
     return minAmount; 
    } 

    public void setMinAmount(BigDecimal minAmount) { 
     this.minAmount = minAmount; 
    } 

    @XmlElement(name = "max_amount") 
    public BigDecimal getMaxAmount() { 
     return maxAmount; 
    } 

    public void setMaxAmount(BigDecimal maxAmount) { 
     this.maxAmount = maxAmount; 
    } 

    @XmlElement(name = "currency") 
    public String getCurrency() { 
     return currency; 
    } 

    public void setCurrency(String currency) { 
     this.currency = currency; 
    } 
} 

當我收到一些外部服務的迴應時,我能夠unmarsh al表示字符串和結果有正確的Service類別設置,但serviceDesc總是null。有什麼方法可以正確解開這個結構嗎?


在另一個問題(針對這個問題被標記爲一式兩份)的情況是,當你有相同的標籤名稱但不同的號碼在標籤我的情況下內容的屬性是不同的,也是在這個問題班到內容應該是unmarshaled是我的小孩和父母的一個是String另一個是一些自定義對象。認爲這就是爲什麼我無法正確實施XmlAdapter

+0

[JAXB @XmlElements的可能的複製,不同類型但同名?](http://stackoverflow.com/questions/5007516/jaxb-xmlelements-different-types-but-same-name) – sunil

回答

0

您的XML結構無效。

對於同一名稱空間中的不同結構,您不應該有兩次相同的標記。

解決方案:

  • 重命名標籤(serviceDesc例如)
  • 使用2名不同的命名空間(ns1:servicens2:service例如)
+0

這不是我的結構我正在實現與外部服務的集成,並返回這種響應。我不明白爲什麼這個XML是無效的。你可以在任何xml驗證器中檢查有效性。 – GROX13

+0

你應該嘗試製作XSD,你會發現這是無效的。 –

相關問題