2016-05-08 15 views
2

ich XML-Nutzlasten wie wünschen:Konvertieren von Java generisches Objekt zu XML JAXB mit

<ResponseDto> 
    <ResponseHeader> 
     <success>true</success> 
    </ResponseHeader> 
    <ResponseBody> 
     <ObjectA> 
     </ObjectA> 
    </ResponseBody> 
</ResponseDto> 

und eine andere Nutzlast wie:

<ResponseDto> 
    <ResponseHeader> 
     <success>true</success> 
    </ResponseHeader> 
    <ResponseBody> 
     <ObjectB> 
     </ObjectB> 
    </ResponseBody> 
</ResponseDto> 

so möchte ich eine Klasse für ResponseDto machen, welche enthält ResponseHeader Object und Ein generic Java Object10, in dem ich verschiedene Arten von Objekten platzieren kann, so versuchte ich mehrere Arten von Objekten in einer einzigen Klasse mit @XMLElement(name = "ResponseBody"), aber es erlaubte mir nicht, die gleichen Namen von XMLElements

zu haben

Was kann ich in diesem Szenario tun? Vielen Dank im Voraus.

Antwort

3

Die meisten Unternehmensanwendungen verwenden JAXB. Du könntest viele Tutorials bekommen, von denen einige unten sind.

  1. http://www.mkyong.com/java/jaxb-hello-world-example/
  2. https://examples.javacodegeeks.com/core-java/xml/bind/jaxb-marshal-example/
  3. https://www.javacodegeeks.com/2014/12/jaxb-tutorial-xml-binding.html

Schritt 1: Zunächst müssten Sie XSD-Datei zu machen. Es gibt viele Online-Seiten, auf denen xsd generiert werden kann. Verwenden Sie http://xmlgrid.net/xml2xsd.html für jetzt. XSD sollte so aussehen.

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="ResponseDto"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="ResponseHeader"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="success"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="ResponseBody"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="ObjectA" minOccurs="0"/> 
       <xs:element type="xs:string" name="ObjectB" minOccurs="0"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Siehe meine nachstehende Post als Referenz. read and get xml values in java

+0

Ist es möglich, es in Java zu tun? – MDaniyal

+0

Ja, beziehen Sie sich auf meinen untenstehenden Link hat eine detaillierte Erklärung. –

+0

only, Trick hier ist, dass Sie Element ObjectA und minOccurs = 0 machen müssen, da in Ihrem Fall beide vorhanden sind. –