2016-12-15 2 views
0

ich die folgende XML-Antwort in ein List<String> Objekt serialisiert werden soll:Wie wird eine Liste mit verschiedenen Elementnamen in einer Liste mit JAXB serialisiert?

<result> 
    <a1/> 
    <a2/> 
    ... 
    <a20/> 
</result> 

Like:

public class Result { 
    //should contain a1... a20 
    private List<String> list; 
} 

Ist das möglich?

Hintergrund: Ein Webservice, den ich nicht kontrollieren kann, bietet mehrere dieser "Listen" in der XML-Antwort. Aber innerhalb dieser Listen werden die Listenelemente mit einem Index wie a20 benannt. Ich möchte nicht, dass jaxb so 20 Bean-Eigenschaften erzeugt.

Antwort

1

Es ist nicht direkt möglich wie java.lang.String. Einige Conversions wie unten könnten jedoch den Zweck erfüllen.

@XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "any" 
    }) 
    @XmlRootElement(name = "result") 
    public class Result { 

     @XmlAnyElement(lax = true) 
     public List<Object> any; 

     public List<Object> getAny() { 
      if (any == null) { 
       any = new ArrayList<Object>(); 
      } 
      return this.any; 
     } 
} 

Parsing-Code:

Result rs = (Result) JAXBUtils.generateObjects(...) // unmarshalling code. 

for(Object s : result.getAny()) { 
      System.out.println("response: " + ((ElementNSImpl)s).getTextContent()); 
    } 

Beispiel:

sample.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<result> 
    <a1>one</a1> 
    <a2>two</a2> 
    <a20>three</a20> 
</result> 

Ausgabe:

response: one 
response: two 
response: three 
+0

Welcher instanceof wird 'Objekt's der Liste sein? Sie übertragen es auf "ElementNSImpl" für Sysout. Sind sie immer von diesem Typ? Wenn ja, könnte ich auch "List any;" in meine Bean schreiben? – membersound

+0

Ja, es ist 'ElementNSImpl', weil der Typ unbekannt ist. Sie können DOM des Elements mit 'getOwnerDocument' abrufen und daran arbeiten. 'org.w3c.dom.Document document = elementNsimpl.getOwnerDocument()' – ulab

Verwandte Themen