2017-02-11 59 views
0

我有和的XmlObject [],它具有数据是这样的:list2数据的XmlObject []以java.lang.Object继承[]

<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标签。

我使用Axis2,以XML绑定,因为它支持JAVA Array

其实我在Hibernate中使用query.list();收到从组web服务一个List<Object[]> by子句。现在在一个web服务中,它必须只处理数组没有特别的java.util.Collections,所以我把这个List<Object[]>转换成一个Object[]并作为响应发送给guiObject中的客户端。

一旦接收到响应,当我尝试itertate过这样的:客户端代码:

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> 
....... 

我可以使用getters获取数据,但使用的是guiObject数组的情况下是不可能的。帮帮我 !

+1

你能否为他人添加一些Java代码来理解你到目前为止所做的以及你正在尝试做什么? – anacron

回答

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

+0

它在frag.getAx21()和frag.getAx22()处给出null。为什么? –

+0

它似乎有一些问题,当我使用ax22与其他名称工作正常。任何想法 ? –

+0

如果您的值存在问题,您可以像@XmlRootElement(name =“xml-fragment”)那样尝试映射注释。您也可以使用tish来表示@XmlAttribute(name =“”)和@XmlElement( “) – webmaster