Müssen benutzerdefinierte Klassen anstelle von generiertem (nach WSIMport) in Web-Services verwenden
-
23-10-2019 - |
Frage
Könnten Sie bitte mit dem folgenden Problem helfen?
Beim Generieren von WS-Clientcode (mit WSIMport-Ant-Task) werden alle Klassen automatisch im selben Paket (z.
öffentlicher Knoten getNode ();
Also wird die Klasse helloService.endpoint.node generiert. Trotzdem habe ich meine eigene HelloService.node-Klasse, die ich im Web-Service verwenden möchte.
Ich definierte Bind.xml -Datei:
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >
<bindings node="wsdl:definitions/wsdl:portType[@name='Node']">
<class name="helloservice.Node"/>
</bindings>
</bindings>
und geben Sie es an die WSIMport -Aufgabe als Bindungsparameter weiter, erhalten Sie jedoch den Fehler:
[wsimport] [ERROR] XPath evaluation of "wsdl:definitions/wsdl:portType[@name='Node']" results in empty target node
[wsimport] line 2 of file:/C:/work/projects/svn.ct/trunk/jwstutorial20/examples/jaxws/simpleclient/bind.xml
Könnte jemand bitte empfehlen, was hier falsch ist? Kann ich meine eigenen Klassen in generierten Web-Service-Klassen so verwenden, oder ich brauche ein komplizierterer?
Danke im Voraus.
Lösung
Um Klassen aus WSDL zu generieren, verwenden Sie in Ant:
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
<wsimport keep="true" sourcedestdir="..." wsdl="..." wsdllocation="..." xnocompile="true" />
Verwenden Sie kein 'Paket' Attribut für WSIMport Ant -Task, sodass alle Klassen in ihren richtigen Paketen erstellt werden.
Um das Paket anzupassen, ändern Sie im Allgemeinen den generierten Paketnamen ABC, um XYZ Element zur WSIMport -Aufgabe hinzuzufügen und die Datei Binding.jxb wie folgt zu definieren.
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="schema-for-a.b.c.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="x.y.z" />
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
wobei das Schema-für-AbcxSD das von WSGen Task generierte Schema ist (das WSDL mit geeigneten Schemata erzeugt).
Detaillierter zur JAXB -Anpassung: http://docs.oracle.com/cd/e17802_01/webservices/webservices/docs/1.6/tutorial/doc/javawstutorial.pdf, Abschnitt "Anpassen von JAXB -Bindungen"