Frage

Ist es möglich, mit Axis2 und Eclipse einem Web-Service-Client zu generieren und haben Java-Typen verwenden, die Sie bereits in Paketen erstellt, sondern es eigene Typen ist. Grund dafür ist natürlich, wenn ich Typ A bereits erstellt und sie schafft es eigener Typ A ist kann ich nicht nur Variable vom Typ A auf Variable vom Typ B zugeordnet werden.

Die wsdl wird von einem Web-Service zu einem Anwendungsserver bereitgestellt erzeugt. Wenn es nicht möglich ist, es aus, dass zu erzeugen, wäre es möglich, einen Client aus den bereits vorhandenen Java-Dateien zu erzeugen.

War es hilfreich?

Lösung

Wenn Sie wirklich vorhandenen Klassen wollen wieder zu verwenden, können Sie die Axis2 API direkt aufrufen, ohne eine Client-Generierung mit wsdl2java. Nachfolgend finden Sie einige relativ einfachen Code einen Web-Service zu rufen. Sie müssen nur in dem Web-Service-Endpunkt, Methode QName, die erwartete Rendite Klasse (n), und Argumente zu dem Dienst zu füllen. Sie können Ihre vorhandenen Klassen als die Rückgabewerte oder Argumente wiederverwendet werden.

Wenn Ihr Web-Service ist ziemlich kompliziert, dann können Sie feststellen, dass Sie tiefer in die API gehen müssen, um diesen Ansatz zu arbeiten.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

Andere Tipps

Sie erzeugen das Web-Service-Client von WSDL-Datei, richtig?

Das einzige, was das wsdl2java Werkzeug kennt die Informationen in der WSDL-Datei, so wird es wissen, nicht über alle Typen, die Sie bereits erstellt haben.

Wenn Sie die Typinformationen in die WSDL-Datei erhalten Sie können es die Arbeit zu, obwohl ich noch nie versucht.

Wenn Sie eine einfache Möglichkeit, von Typ A kopieren B Typ dann könnte man versuchen, BeanUtils.copyProperties , solange die Getter und Setter von Typ A und Typ B-Spiel.

so ziemlich die meisten Java-Web Service-Projekte durchlaufen diese. Ich weiß nicht, ob die .NET / C # Welt eine elegantere Lösung.

Es ist sinnvoll, als Mike erwähnt, BeanUtils.copyProperties zu verwenden.

BR,
~ A

Wenn Sie als IDE Eclipse, das heißt waht Sie brauchen: http: //www.eclipse. org / webtools / . Es tut über andere Dinge genau das, was Sie wollen.

Sie können direkt ServiceClient Klasse verwenden Web-Service zu rufen, die nur Anruf unter Verwendung von XML bietet und gibt XML-Antwort. Für verschiedene Methoden des Web-Service, müssen Sie die XML-Antwort auf einen Java-POJO konvertieren, es zu benutzen. Nur Response-Handling muss auf Ihrer Seite zu tun. dass Sie von XML tun wie kann etc Karte ...

So werden Sie keine andere Stub-Klassen brauchen jeden Web-Service zu rufen, muss nur Antwort XML behandeln. Sie können XML zu POJO mit Castor oder JAXB Libs konvertieren.

Dies ist die Art und Weise brauchen Sie nicht Ihren Client jedes Mal für diff zu ändern. Internetdienste. Sie können extern wie Bereitstellen einer Antwort-Handler-Client entwickeln. So dass für jeden anderen Web-Service werden Sie diff haben. Antwort-Handler-Klasse, die ist durch die Implementierung von Ihnen verbinden.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

Hinweis:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on-the-client-Side.htm

http: // www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

Dank.

www.techlads.com

Falls dieser Beitrag ist noch von Nutzen für jemanden las ich die axis2 Kunden Führer zu erzeugen: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Es scheint, dass die Axis2 Eclipse-Plugin im integrierten Modus ADB Codegenerierung zu nennen (siehe http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), wodurch die Schaffung innere Klassen in dem Webdienst Stummel. Ich weiß nicht, ob die Erzeugungsmodus in den erweiterten Modus zu wechseln (Datenklassen aus der Stub-Klasse erzeugen) ist möglich, aber man kann es Befehlszeile WSDL2Java tun:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

Die Option -u weist den ADB-Code-Generator Datenklassen als separate Klassen zu erstellen und nicht die inneren Klassen in dem Stummel.

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