eine Web-Service-Client-Anwendung erstellen beginnt immer mit einer bestehenden WSDL-Datei (im Gegensatz zu einem Web-Service-Provider zu entwickeln), und selbst wenn dies nicht der einzige Weg, würde ich vorschlagen, zu verwenden, das wsimport
Werkzeug (siehe 5 Techniques for Creating Java Web Services from WSDL für andere Optionen, aber ich werde sie nicht abdecken).
in Ihrem Client-Projekt So fügen Sie den folgenden Code-Schnipsel zu Ihrem pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlUrls>
<wsdlUrl>
http://localhost:8080/helloservice/HelloService?wsdl
</wsdlUrl>
</wsdlUrls>
<packageName>com.example.maven.jaxws.helloclient</packageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<bulid>
Die jaxws-maven-plugin:wsimport
mojo standardmäßig auf die Phase generate-sources
Lebenszyklus gebunden ist, so dass jede Phase hinter generate-sources
läuft die jaxws:wsimport
auslösen Tor.
Beachten Sie, dass dies wirklich eine minimale Konfiguration ist. Wenn Sie mehr Details/Kontrolle wünschen, überprüfen Sie die Dokumentation des wsimport
mojo.
Zum Beispiel Dateien zu verwenden anstelle von URLs für die WSDL (und Java-Code in einem Ort mehr kompatibel mit Maven Best Practices zu erzeugen), zu verwenden:
<configuration>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
<wsdlDirectory>${basedir}/src/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>foo.wsdl</wsdlFile>
<wsdlFile>bar.wsdl</wsdlFile>
</wsdlFiles>
...
</configuration>
Update: Um eine Pre aufrufen -konfigurierte Stub (der Endpunkt-Adresse aus dem WSDL verwendet wird), ist der Code:
Hello port = new HelloService().getHelloPort();
String result = port.sayHello("Duke!");
ist, um aus der in der WSDL spezifiziert einen unterschiedlichen einen Endpunkt, dessen Adresse aufzurufen, definieren die neue Endpunkt-URL und die QName :
URL endpoint_new = new URL("NEW_ADDRESS_HERE");
QName qname = new QName("http://"+"ORIGINAL_PACKAGE", "SERVICENAME");
Hello port = new HelloService(endpoint_new, qname).getHelloPort();
wo ORIGINAL_PACKAGE
das Paket ist, wo der Dienst in veröffentlicht wurde, ist SERVICENAME
der Name des Service, den wir benötigen, beispielsweise HelloService
.
Sie sagen also, dass Sie eine Kopie der WSDL von einem vorherigen Lauf herunterladen sollten. Für Metro kann dies schwierig sein, da es zusätzliche Lookups enthält. –