2012-04-07 5 views
0

Ich habe eine XSD, die die SOAP-Nachrichten für ein Remote-Gerät definiert. Ich möchte diese XSD nehmen und daraus Java-Quellcode generieren, um diese Nachrichten zu erstellen. Ein Beispiel für eine Nachricht in der XSD ist:Generieren von Java-Quelle aus einer XSD, die SOAP-Nachrichten definiert

<xs:element name="get-ethernet-stats"> 
    <xs:annotation> 
     <xs:documentation>Ethernet stats information</xs:documentation> 
    </xs:annotation> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="mode" type="response-mode"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:element name="get-ethernet-stats-resp"> 
    <xs:complexType> 
     <xs:annotation> 
      <xs:documentation>Ethernet Stats</xs:documentation> 
     </xs:annotation> 
     <xs:sequence> 
      <xs:element ref="status"/> 
      <xs:element name="result" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="rx" type="xs:int"/> 
         <xs:element name="tx" type="xs:int"/> 
         <xs:element name="drops" type="xs:int"/> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Haben Sie Vorschläge, wie Sie dies tun? Ich habe in JAXB aussah, aber ich nicht die ursprünglichen Quelldateien haben, und wenn ich „xjc file.xsd“ laufen, hier die Quelldateien zu erhalten, ist Teil der Ausgabe:

parsing a schema... 
compiling a schema... 
[ERROR] A class/interface with the same name "file.MemosReceipt" is already in use. Use a class customization to resolve this conflict. 
    line 7669 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] (Relevant to above error) another "MemosReceipt" is generated from here. 
    line 8242 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] A class/interface with the same name "file.InstructionsReceipt" is already in use. Use a class customization to resolve this conflict. 
    line 7720 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] (Relevant to above error) another "InstructionsReceipt" is generated from here. 
    line 8341 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] Two declarations cause a collision in the ObjectFactory class. 
    line 7686 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] (Related to above error) This is the other declaration. 
    line 8267 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] Two declarations cause a collision in the ObjectFactory class. 
    line 8626 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

[ERROR] (Related to above error) This is the other declaration. 
    line 6114 of file:/Users/rwb7041/Documents/file/xsd/file.xsd.xsd 

Failed to produce code. 

Antwort

0

Ich schlage vor, Sie haben ein Blick auf jaxws-rt-2.1.4.jar. Dies ermöglicht zwei Arten, die XML zu liefern, die in der SOAP-Nachricht gesendet werden soll:
(1) nur den Körperinhalt liefern; der Code übernimmt das Hinzufügen Umschlag/Kopf/Körpers und Namensräume entsprechend den WSDL abgerufene
(2)

Keine Codeerzeugung erforderlich ist, dann die vollständige Hüllkurve plus Namensräume liefern.

Siehe zum Beispiel jaxws-guide.html

+0

ich nicht genau sehen, wie dies hilft. Ich verstehe, dass es mir helfen wird, den SOAP-Umschlag zu generieren, aber basierend auf meinem Verständnis werde ich den Körper generieren müssen. Um den Körper zu generieren, muss ich wissen, welche Nachricht zu senden und zu tun, dass ich die entsprechenden Klassen aus dem XSD generieren muss, um den Inhalt des Körpers – rwb7041

+0

Nun, nicht sicher, dann genau das, was Sie suchen, aber Die Art, wie ich es benutze, ist ein neues DOM-Dokument zu erstellen, es nach den XSD-Spezifikationen und spezifischen Details zu füllen (Code-Generierung kann hier helfen, aber warum) und das DOM in XML umwandeln und es an eine neue Instanz von 'javax übergeben. xml.ws.Service ", wobei Port, Service, XML und WSDL-URL für die' createDispatch'-Methode bereitgestellt werden. – Maestro13

+0

Ich habe kein WSDL-Dokument, das hilft also überhaupt nicht – rwb7041

Verwandte Themen