XmlObject []到java.lang.Object []

时间:2017-02-11 14:07:31

标签: java web-services axis2

我有和XmlObject [],其数据类似于:list2 data

<xml-fragment xmlns:ax22="http://xyz...>
 <ax21:array>1</ax21:array>
 <ax21:array></ax21:array>
 <ax21:array>124029</ax21:array>
 <ax21:array>20170210</ax21:array>
 <ax21:array>2</ax21:array>
</xml-fragment>
 <xml-fragment>
 .....

有没有简单的方法将其转换为List<Objects[]>或java Array<A[]>?请注意,有数百个这样的xml-fragment标签。

我正在使用带有XML绑定的Axis2,因为它支持java Array

实际上,我使用List<Object[]>在Hibernate的group by子句中接收了query.list();的web java.util.Collections。现在,在网络服务中,它必须只处理没有特殊List<Object[]>的数组,因此我将此Object[]转换为guiObject并将其作为响应发送到Object[] list2 = guiObject.getBatchListArray(); // This gives XmlObject[] which in turn contains other XmlAnyTypeImpl arrays. for (Object entry : list2) { Object[] obj = (Object[]) entry; // exception occurs here 中的客户端。

当我尝试迭代时收到响应:客户端代码:

org.apache.xmlbeans.impl.values.XmlAnyTypeImpl cannot be cast to [Ljava.lang.Object;

它给了我例外:

guiObject

<xml-fragment xsi:type="ax21:GuiObject" xmlns:ax22="http://model.kgs.persistence/xsd" xmlns:ax21="http://model.kgs.ws/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="http://impl.kgs.ws" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <ax21:accountNot xsi:nil="true"/> <ax21:assignedUser xsi:nil="true"/> <ax21:batchList> <ax21:array>1</ax21:array> <ax21:array>KOREFFAA</ax21:array> <ax21:array>103941</ax21:array> <ax21:array>20170201</ax21:array> <ax21:array>1</ax21:array> </ax21:batchList> <ax21:batchList> ....... 包含的实际数据:

guiObject

我可以使用getter从<h2></h2>获取数据,但是在数组的情况下,这是不可能的。帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用JAXB实现它:

1)创建您的POJO:

@XmlRootElement(name="xml-fragment")
public class Fragment {  
    @XmlAttribute(name="xmlns:ax22")
    private String ax22;
    @XmlElement(name="ax21")
    private String[] ax21;
    //getters, setters, constructor
}  

2)将您的xml解组为对象

   try {  

    File file = new File("xmlfile.xml");  
    JAXBContext jaxbContext = JAXBContext.newInstance(Fragment.class);  

    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  
    Fragment frag= (Fragment) jaxbUnmarshaller.unmarshal(file);  

    System.out.println(frag.getAX22());   

  } catch (JAXBException e) {  
    e.printStackTrace();  
  }  

了解更多here