2010-02-28 2 views
6

Ich habe eine WSDL, die 3 Schemas innerhalb des Elements "types" enthält. Die Schemas sind nicht in externen XSDs definiert, sondern innerhalb des types-Elements.JAXB Anpassungen - Mehrere Schemas in WSDL und schemaLocation

Ich möchte ein Element in Schema Nummer 2 anpassen und seinen Namen ändern, um einen Konflikt zu vermeiden.

Also in der SchemaLocation wie kann ich das tun? Trotz der Frage zu machen habe ich die Art und Weise, dies zu tun:

schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2"> 
    ... 
    <jxb:bindings node="some xpath 

aber ich bin nicht derjenige, der es gefunden, aber ein Kollege von mir, der mit mir nicht mehr funktioniert. Gibt es eine Ressource, wo ich die Erklärung dafür finden kann, selbst wenn ich es verstehe? Ein Link oder ein Buch? Irgendwo wo ich auch andere Beispiele finden kann.

Mein Problem ist der SchemaLocation-Wert (../ wsdl-files/mywsdl.wsdl # Typen? Schema2) nicht der Xpath. Ich möchte alle Möglichkeiten kennen, ein Schema innerhalb einer WSDL zu referenzieren. Ich brauche eine Dokumentation dafür oder so.

Vielen Dank

+0

Mein Problem ist, das schema Wert (../ wsdl-files/mywsdl.wsdl # types? schema2) nicht der xpath usw. Ich möchte alle Möglichkeiten kennen, um ein Schema innerhalb einer WSDL usw. zu referenzieren. Ich brauche dafür eine Dokumentation. Nochmals vielen Dank – DaTroop

+0

Welches Werkzeug verwenden Sie, um die WSDL zu binden? – skaffman

+0

Sie sollten Ihre Frage bearbeiten und den Inhalt Ihres Kommentars als "Update:" Abschnitt einfügen. Löschen Sie den Kommentar. –

Antwort

2

Die JAXB Ri v2.1 Unterstützung für [Schemakomponente Designators] [1], die in der Theorie können Sie Schemakomponenten symbolisch verweisen, anstatt durch ihre Dateipfad und XPath Lage . Im Prinzip ist das viel schöner zu benutzen, aber ich habe es nie selbst benutzt.

Ich bin mir nicht sicher, wie weit dies jedoch unterstützt wird. Es gibt kaum eine Erwähnung davon irgendwo anders als in diesem Blogeintrag. Es erwähnt, dass es Teil der vorgeschlagenen Spezifikation für JAXB 2.1 war. Wenn dies also passiert ist, sollte es von jeder JAXB 2.1-Implementierung einschließlich Java6 implementiert werden. Es ist jedoch möglich, dass es nie wirklich zur Spezifikation hinzugefügt wurde.

+0

Danke Mann! Das sieht gut aus. Aber haben Sie etwas, das diese beschreibt: # types? Schema2 Vielen Dank! – DaTroop

+1

@DaUltimateTrooper: Der Punkt von SCD ist, dass Sie den Schema-Speicherort in der Bindungsanpassung nicht angeben müssen, Sie verweisen auf die Schemaelemente nach Name. – skaffman

+1

Von dem, was ich gefunden habe, wird SCD immer noch nicht offiziell unterstützt, aber Suns xjc wird es benutzen, wenn es die '-extension'-Option hat, und abhängige Tools wie CXF arbeiten damit.Die Syntax ist noch schwieriger zu verstehen als XPATH, aber es kann zum Arbeiten gebracht werden. –

1

Hatte ähnliches Problem (fünf Schemas in Typen mit gebräuchlichen Namen) und irgendwie SCD nicht richtig funktionieren. Meine Lösung war folgende:

custombinding.xml:

<jxb:bindings version="2.1" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 

    <jxb:bindings schemaLocation="file:wsdlfile.wsdl" node="*/xs:schema[1]"> 
     <jxb:schemaBindings> 
      <jxb:package name="my.custom.package"/> 
     </jxb:schemaBindings> 
    </jxb:bindings> 
</jxb:bindings> 

xjc Aufruf in Ant-Build-Datei:

<target name="xjc_generate"> 
    <exec executable="xjc" > 
     <arg value="-wsdl" /> 
     <arg value="${wsdl.base}/service/wsdlfile.wsdl" /> 
     <arg value="-d" /> 
     <arg value="${dir.src}" /> 
     <arg value="-b" /> 
     <arg value="${wsdl.base}/service/custombinding.xjb" /> 
    </exec> 
</target>