2017-02-11 16 views
0

У меня есть и XmlObject [], который имеет что-то данные, как: list2 данныхXmlObject [] интерфесам []

<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-фрагмента.

Я использую Axis2 с XML Binding, как он поддерживает Java Array

На самом деле я получаю в веб-сервисов из группы с List<Object[]> пунктом в Hibernate с использованием query.list();. Теперь в web-сервисе он должен иметь дело только с массивами no special 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> 
....... 

Я могу получить данные из 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

он дает значение null в frag.getAx21(), а также в frag.getAx22(). Зачем ? –

+0

Кажется, что проблема возникает, когда я использую ax22, так как с другими именами он работает нормально. Есть идеи ? –

+0

Если вы живете со значениями, вы можете попробовать сопоставления с аннотациями, как это было в @XmlRootElement (name = "xml-fragment"). Вы можете использовать tish для также @XmlAttribute (name = "") и @XmlElement (name = "") – webmaster