Müssen benutzerdefinierte Klassen anstelle von generiertem (nach WSIMport) in Web-Services verwenden

StackOverflow https://stackoverflow.com/questions/2960267

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.

War es hilfreich?

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"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top