2016-11-09 40 views
0

我想要使用SimpleXML 2.1.0将Web服务给定的xml响应映射到java对象,但我被卡住了。发布使用simplexml将xml映射到java 2.1.0

这是XML:

<QueryINVAP-WS-ASSETResponse baseLanguage="ES" creationDateTime="2016-11-08T17:10:09-03:00"> 
<INVAP-WS-ASSETSet> 
    <ASSET rowstamp="265381811"> 
     <ASSETID>1529</ASSETID> 
     <ASSETNUM>2503</ASSETNUM> 
     <DESCRIPTION>POWER CHASSIS(CISCO)</DESCRIPTION> 
     <ITEMNUM>A000232</ITEMNUM> 
     <LOCATION>19281-05-A1</LOCATION> 
     <SERIALNUM>FDO1728YGGV</SERIALNUM> 
     <SITEID>TVD</SITEID> 
    </ASSET> 
</INVAP-WS-ASSETSet> 

正如你可以想像,我要转换为Java对象的唯一数据是由assetid,assetnum,描述,itemnum,位置,SERIALNUM和SITEID 。

到现在为止,这是我有:

@Root(name = "QueryINVAP-WS-ASSETResponse", strict = false) 
public class Activos { 

    @ElementList(inline = true, entry = "ASSET", type = Activo.class) 
    private List<Activo> activos; 

    @Root 
    class Activo { 

     @Attribute(name = "rowstamp") 
     public String rowstamp; 

     @Element(name = "ASSETID") 
     public Integer assetid; 

     @Element(name = "ASSETNUM") 
     public String assetnum; 

     @Element(name = "DESCRIPTION") 
     public String description; 

     @Element(name = "LOCATION") 
     public String location; 

     @Element(name = "SERIALNUM") 
     public String serialnum; 

     @Element(name = "SITEID") 
     public String siteid; 
    } 
} 

我得到的错误是:

org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(data=false, empty=true, entry=ASSET, inline=true, name=, required=true, type=class invap.invapgestionmovil.modelos.Activos$Activo) on field 'activos' private java.util.List invap.invapgestionmovil.modelos.Activos.activos for class invap.invapgestionmovil.modelos.Activos at line 1 

我究竟做错了什么?

回答

0

那么,最后我解决了这个问题。我创建了三个类别:

@Root(name = "QueryINVAP-WS-ASSETResponse", strict=false) 
public class QueryINVAPWSASSETResponse { 

    @Element(name = "INVAP-WS-ASSETSet") 
    private INVAPWSASSETSet set; 
} 

@Root(name = "INVAP-WS-ASSETSet", strict=false) 
public class INVAPWSASSETSet { 

    @ElementList(inline=true, name = "ASSET") 
    private List<Activo> activos; 
} 

@Root(name = "ASSET", strict = false) 
public class Activo { 

    @Attribute(name = "rowstamp") 
    public String rowstamp; 

    @Element(name = "ASSETID") 
    public Integer assetid; 

    @Element(name = "ASSETNUM") 
    public String assetnum; 

    @Element(name = "DESCRIPTION") 
    public String description; 

    @Element(name = "LOCATION") 
    public String location; 

    @Element(name = "SERIALNUM") 
    public String serialnum; 

    @Element(name = "SITEID") 
    public String siteid; 

} 

现在,当我做呼叫我得到 “包装” 与其他两个类资产。

希望对他人有所帮助:) Regards