JAXB Unmarshall具有相同标记名但结构不同的XML

时间:2017-04-12 09:53:27

标签: java jaxb unmarshalling

我试图解组这种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;
    }
}

当我收到某些外部服务的回复时,我可以解组该字符串,结果的Service类设置正确,但serviceDesc始终为null。有什么方法可以正确地解组这个结构吗?

在另一个问题(这个问题被标记为重复)的情况下,当你有相同的标签名称,但在我的情况下,不同的属性数量标签的内容是不同的,也在那个内容应该被解组的问题类中在我的情况下是孩子和父母一个是String另一个自定义对象。认为这就是为什么我无法正确实施XmlAdapter的原因。

1 个答案:

答案 0 :(得分:0)

您的XML结构无效。

对于同一名称空间中的不同结构,您不应该使用相同的标记两次。

解决方案:

  • 重命名您的代码(例如serviceDesc
  • 使用2个不同的命名空间(例如ns1:servicens2:service