2009-06-18 8 views
3

Ich würde gerne wissen, ob jemand eine gute Bibliothek empfehlen kann, Java Webservices Stubs als Clients zu generieren.Bibliothek zum Erstellen von Java-Stubs für Webservice

Derzeit verwende ich ein Produkt, das einen Generator eingebettet hat, der nur die WSDL benötigt und dann die benötigten Klassen und Methoden erstellt.

Meine Probleme ist es wirft Warnungen und erstellt keine Methode für einige Webdienste, die ich versuche zu verwenden.

Das eigentliche Problem ist, es erklärt nicht, was das Problem ist (so kann ich mit dem Besitzer des Webservice gehen und es geändert haben), noch lassen Sie mich die Ausgabe ändern, damit ich das Problem wahrscheinlich selbst beheben kann.

Noch, die Besitzer der Webservices (weil dies mit mehreren verschiedenen ws passiert) sagen, ihre ws läuft gut und tatsächlich, wenn ich soapUI verwenden sie tatsächlich arbeiten !!!

Ich warf einen kurzen Blick auf die Bibliotheken von soapUI verwendet es selbst und ich sehe vielversprechend aus.

Ich weiß, es ist Axis, die die Arbeit tun sollen, aber meine Sorge ist, dass mein Versagen Generator bereits die Bibliothek verwendet (was ich etwas macht, wird es wieder gescheitert)

Und in letzter Zeit habe ich nicht wissen, ob diese beiden Bibliotheken der Java-Source-Stummel oder nur haben Methoden wie

Object [] args = ...; 
service.inkvoke("updateCustomer", args); 

erzeugen wenn das, was würde Ich mag zu haben ist so etwas wie:

CustomerWs cws = .... 
cws.updateCustomer(custId, custName, custAddress /*etc*/); 

Also, hat jemand eine GOOD WS Stubs Generator, der empfehlen kann?

Ich bin über meine eigenen handcode, aber es wird auf jeden Fall mehrere Tage dauern, akzeptabel sein

Antwort

2

Was benutzen Sie gerade? Ich verwende Axis Wsdl2Java als Ant-Task. Es generiert die Arten von Stubs, die Sie möchten. Funktioniert großartig, obwohl das Einrichten des Klassenpfads zum Ausführen des Builds in Eclipse ein wenig mühsam war (es gab eine Handvoll Gläser, die ich aufspüren und einbeziehen musste). In meinem ant Buildfile sieht es wie folgt aus:

<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" /> 
<target name="foo"> 
<axis-wsdl2java 
       output="${build.dir}" 
       testcase="false" 
       verbose="true" 
       typemappingversion="1.2" 
       url="http://ws.domain.com/url/of/WebService?wsdl" /> 
<!-- Compile, etc... --> 
</target> 
+0

Ich denke, ich werde Axis einen Versuch geben. Zumindest werde ich in der Lage sein, die Fehlermeldungen zu erhalten, anstatt stillschweigend zu versagen (oder zu sagen "Generation failed"). :) Danke für die volle Wiederaufnahme von wsdl2java. Ich denke, du hast mich wenigstens ein paar Stunden gerettet. – OscarRyz

1

Apache Axis 2 ist der Weg zu gehen ... wenn Sie ein bisschen herum müssen spielen mach es richtig. Es ist vielleicht der gebräuchlichste Weg, dies zu tun. Vielleicht basiert das Werkzeug, das Sie verwenden, auf Achse 1?

+0

Ich verwende Axis (indirekt) und es schlägt fehl. Irgendwelche anderen Vorschläge? – OscarRyz

+1

Ich würde es direkt versuchen. Axis ist so ziemlich der Standard. – jle

+0

-1: Vorsicht !! Achse 1 hat schreckliche Thread-Sicherheitsfehler (Deadlocks und CPU-Spins) und wurde im April 2006 aufgegeben. Achse 2 ist eine völlig andere Code-Basis und kann einen Blick wert sein. Ich würde zuerst Apache CXF oder Glassfishs Metro versuchen. –

0

Die neueste JAX-WS als Teil der U-Bahn (http://metro.dev.java.net) ist eine ziemlich schöne Abstraktionsschicht. Nimmt ein wenig Anpassung an, aber es war viel intuitiver für mich als einige der anderen Möglichkeiten da draußen.

+0

Ich würde gerne Ihre Erfahrungen mit dem Wechsel von WSDL-> Client hören. Wir verwenden Metro für interne Webservices. –

+0

Wir verwenden es nicht für sehr viel; Wir sind kein großer Java-Shop. Wir haben es zum Beispiel für Webservices verwendet, die wir unseren Kunden zur Verfügung stellen. Abgesehen von der Laufzeitabhängigkeit von der eigentlichen WSDL-Datei (ein Ärgernis mehr als alles andere) waren die meisten Dinge ziemlich einfach. – Joe

3

wirklich vorsichtig sein, wenn Sie auf „Achse“ verweisen: Apache Axis 1 wurde Anfang 2006 mit Thread-Sicherheit Bugs, die zu Deadlocks und CPU-Spin verlassen (die wir beide erlebt) . Sie werden es sehr bedauern, es zu benutzen. Apache Axis 2 ist eine komplette Neuschreibung und kann einen Blick wert sein. Aber ich würde vorschlagen, dass Sie zuerst auf Apache CXF und Glassfish Metro schauen.

Update: Hier sind Fehlerberichte über die deadlock und 100% CPU spin.Hier ist Cyrille Le Clercs proposed patch von vor drei Jahren, nie begangen.

Wir haben unsere Deadlocks und Spins beseitigt, indem wir unseren Client in Java-Code umprogrammiert haben. Und dann weigerte sich der Axis-Server, mit uns zu sprechen und HTTP 500-Fehler zurückzusenden. Wir mussten fälschlicherweise behaupten, wir seien ein Axis-Client, um eine angemessene Antwort zu erhalten. Die SOAP-Interoperabilität war für das Axis 1-Team keine Priorität.

2

Ich mag Apache CXF - es integriert sich gut mit Maven durch ein Plugin, und es funktioniert. Ich benutze es seit einiger Zeit für die Erstellung von Client-Stub-Codes, und in der letzten Firma, die ich arbeitete, nutzten sie es auch für den Server-Teil der WS's.

In den letzten Projekten, an denen ich mit CXF + Maven + Subversion gearbeitet habe, haben wir die generierten Klassen in Subversion, nur eine Kopie der WSDL-Datei, nicht eingefügt - die Stub-Klassen wurden im "generate" -Ziel von generiert Maven.

1

Ich würde definitiv vorschlagen, etwas basierend auf Standards basierte APIs zu verwenden. Das würde JAX-WS APIs bedeuten. Apache CXF und Metro sind die beiden wichtigsten JAX-WS-Implementierungen, obwohl JBoss auch über eine Implementierung verfügt. Axis2 hat eine nicht zertifizierte Implementierung, aber keine Unterstützung für Code-Gen.

Der beste Teil der Verwendung einer auf Standards basierenden API ist, wenn Sie ein Problem mit einem Produkt haben, können Sie das andere versuchen. In vielen Fällen habe ich gesehen, das andere Produkt funktioniert auch nicht, aber wird eine andere Fehlermeldung oder ähnliches ausspucken, die half, die Tatsache zu diagnostizieren, dass es wirklich ein Problem in unserem eigenen Code oder wsdl ist.

Auch JAX-WS ist in Java6 integriert. Wenn Sie planen, auf Java6 zu laufen, könnten Sie es verwenden und müssen sich nicht mit zusätzlichen Jars und ähnlichem beschäftigen.