创建 Web 服务客户端应用程序总是从现有的 WSDL 文件开始(与开发 Web 服务提供者不同),即使这不是唯一的方法,我还是建议使用 wsimport 工具(参见 @987654321 @ 用于其他选项,但我不会介绍它们)。
因此,在您的客户端项目中,将以下 sn-p 添加到您的 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>
jaxws-maven-plugin:wsimport mojo 默认绑定到generate-sources 生命周期阶段,因此运行generate-sources 之后的任何阶段都将触发jaxws:wsimport 目标。
请注意,这实际上是一个最小配置。如果您想要更多详细信息/控制,请查看wsimport mojo 的文档。
例如,要对 WSDL 使用文件而不是 URL(并在更符合 maven 最佳实践的位置生成 Java 代码),请使用:
<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>
更新:要调用预先配置的存根(使用来自 WSDL 的端点地址),代码是:
Hello port = new HelloService().getHelloPort();
String result = port.sayHello("Duke!");
为了调用地址与 WSDL 中指定的地址不同的端点,请定义新的端点 URL 和 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();
其中ORIGINAL_PACKAGE是服务发布所在的包,SERVICENAME是我们需要的服务的名称,例如HelloService。