xsd-schema nicht dargestellt werden durch wsdl
Ich entwickle einen WebService mit JAX-WS(ich bin mit wsimport Ziel auf jaxws-maven-plugin). Ich schrieb eine WSDL-Import eines XSD-schema.
WEB-INF/wsdl/service.wsdl
WEB-INF/wsdl/service.xsd
Auch ich generierten web-service-Klassen erstellt und Endpunkt und alle. Es hat alles Super geklappt bisher. Wenn ich lief meinen service auf den Tomcat 7 ist alles ok. Ich kann auf eine wsdl-Datei in meinem browser aus:
http://localhost:8080/webService/servlet-url?wsdl
aber ich kann nicht Zugang zu einem xsd-schema. Das problem ist in diesem wsdl:
<xsd:schema>
<xsd:import namespace="http://ws.service/domain/1.0" schemaLocation="service.xsd"/>
</xsd:schema>
Natürlich bei der Generierung der Klassen, wsdl-und xsd sind auf lokaler Pfad, aber ich will, dass Sie aus der Ferne zugegriffen werden, wenn Sie web-Dienst ausgeführt wird. Ich weiß, dass schemaLocation sollte so etwas wie dieses "http://localhost:8080/webService/servlet-url?xsd=1".
In wsdl vorgestellt, die im browser import sollte so Aussehen:
<xsd:schema>
<xsd:import namespace="http://ws.service/domain/1.0" schemaLocation="http://localhost:8080/webService/servlet-url?wsdl&resource=service.xsd"/>
</xsd:schema>
localhost:8080/webService/servlet?wsdl gibt mir:
wsdl:definitions targetNamespace="http://ws.serv.com/Service/1.0" name="emuiaService">
<wsdl:types>
<xsd:schema>
<xsd:import namespace="http://ws.serv.com/Service/domain/1.0" schemaLocation="schema.xsd"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="halloMsg">
<wsdl:part name="parameters" element="dom:halloRequest"/>
</wsdl:message>
<wsdl:message name="halloResponseMsg">
<wsdl:part name="return" element="dom:halloResponse"/>
</wsdl:message>
und so weiter...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kann fast nicht glauben, dass dies war ein so schwieriges problem zu lösen!
Ich habe schon gegoogelt wie verrückt, um eine Lösung zu finden, um genau dieses problem!!! Dann ich habe gekämpft, wirklich schwer zu finden, eine Lösung auf meinem eigenen. Von debugger-schrittweise ausführen der java-6-openjdk-Standard javax.xml.ws.spi.Der Provider-Implementierung (die "Fabrik" in der JRE, die schafft das javax.xml.ws.Endpoint-Objekte, die Sie verwenden für die Veröffentlichung von web-services) habe ich endlich gelernt, einige Dinge, die mir geholfen hat, ist das Handwerk eine Lösung, zumindest funktioniert in Java SE, zumindest in meinem aktuellen JRE, das ist:
Ob diese Lösung brauchbar ist in Java EE, weiß ich noch nicht.
Hier ist, wie ich es gelöst:
Die entscheidende Sache ist, dass ich die erste Methode Endpoint#erstellen (nicht Endpunkt#veröffentlichen), um eine unveröffentlichte Endpunkt. Dann füge ich die XSD-Datei als "meta-Daten", um die (noch nicht veröffentlichten) Endpunkt (code " - ep.setMetaData(...)"). Dann Veröffentliche ich den Endpunkt (code " - ep.veröffentlichen(...)").
Nun, wenn ich auf
http://localhost:8080/svc/hello?wsdl
ich bekommen:und mein XSD-Datei vorhanden ist, aus
http://localhost:8080/svc/hello?xsd=1
!Beachten Sie, dass meine MyService.die wsdl-Datei auf der Festplatte enthält noch:
Ok, hier wir gehen.
In die WSDL-Datei zu modificate so etwas
Auf diesem kleinen snippet wichtig sind xmlns-tag. Diese dienen zur Bereitstellung von schema-XSD. Neben
In diesen Tags unten werden Sie bekommen, was Sie haben in
service.xsd
- Datei, oder zeigen Sie es inhttp://localhost:8080/webService/servlet-url?xsd=1
wir weiterDen oben genannten tag sind zeigen Sie Ihre Methode Namen. Neben
Den oben genannten tar für Ihren Betrieb ist. Weiterhin
Nächsten 🙂
Und endlich fertig 🙂
Beachten Sie, dass Sie haben, ändern Sie den aktuellen tag für tag
<wsdl:...></wsdl:...>
Speichern Sie es, der öffentlichkeit, und Sie haben Spaß XSD-schema wird in der WSDL -.
Ich hoffe Euch helfen. Ciao.