2017-04-12 138 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,你会发现这是无效的。 –

相关问题