java 调用wsdl接口 大神帮忙讲解一下
调用WSDL(Web Services Description Language)接口需要以下几个步骤:
- 生成客户端代码:使用工具如
wsimport
生成与WSDL对应的Java客户端代码。 - 调用生成的客户端代码:使用生成的代码创建服务对象并调用服务方法。
详细步骤
1. 使用 wsimport
生成客户端代码
wsimport
是JDK自带的工具,用于根据WSDL文件生成客户端代码。假设你的WSDL文件位于 http://example.com/service?wsdl
,在命令行中运行:
shwsimport -keep -s src -d bin http://example.com/service?wsdl
选项解释:
-keep
:保持生成的源代码。-s src
:指定源代码的生成目录。-d bin
:指定编译的类文件目录。
生成的代码通常包括服务接口、服务实现类和数据类型类。
2. 调用生成的客户端代码
假设生成了一个服务接口 MyService
和服务实现类 MyServiceImpl
。以下是调用服务的方法:
javaimport com.example.service.MyService;
import com.example.service.MyServiceImpl;
public class WsdlClient {
public static void main(String[] args) {
try {
// 创建服务实现类的实例
MyServiceImpl serviceImpl = new MyServiceImpl();
// 获取服务接口
MyService service = serviceImpl.getMyServicePort();
// 调用服务方法
String result = service.someMethod("inputParameter");
// 输出结果
System.out.println("Service response: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
详细解释
生成客户端代码
wsimport
工具会解析WSDL文件并生成相应的Java代码。这些代码包括:
- 服务接口:定义了服务的方法。
- 服务实现类:实现了服务接口,并提供了创建服务接口实例的方法。
- 数据类型类:用于表示服务方法的输入和输出数据类型。
调用服务方法
创建服务实现类的实例:
javaMyServiceImpl serviceImpl = new MyServiceImpl();
这是生成的服务实现类,用于访问服务接口。
获取服务接口:
javaMyService service = serviceImpl.getMyServicePort();
getMyServicePort
是服务实现类中的一个方法,返回服务接口的实例。调用服务方法:
javaString result = service.someMethod("inputParameter");
使用服务接口的实例调用服务方法,并传递必要的参数。
处理异常:
javacatch (Exception e) { e.printStackTrace(); }
捕获并处理调用过程中可能出现的异常。
示例项目结构
假设你的项目结构如下:
scssMyProject
│ build.gradle (或 pom.xml)
│ wsdl-client.bat (或 wsdl-client.sh)
│
├───src
│ └───main
│ └───java
│ └───com
│ └───example
│ └───client
│ │ WsdlClient.java
│
└───build
└───generated
└───sources
└───wsdl
└───com
└───example
└───service
│ MyService.java
│ MyServiceImpl.java
│ ...
Maven和Gradle配置
使用Maven
添加 jaxws-maven-plugin
到 pom.xml
:
xml<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlUrls>
<wsdlUrl>http://example.com/service?wsdl</wsdlUrl>
</wsdlUrls>
<sourceDestDir>${project.build.directory}/generated-sources</sourceDestDir>
</configuration>
</plugin>
</plugins>
</build>
运行 mvn clean compile
自动生成客户端代码。
使用Gradle
在 build.gradle
中添加以下配置:
groovyplugins { id 'java' } repositories { mavenCentral() } dependencies { implementation 'javax.xml.ws:jaxws-api:2.3.1' } task generateWsdlClient(type: Exec) { commandLine 'wsimport', '-keep', '-s', 'src/main/java', '-d', 'build/classes/java/main', 'http://example.com/service?wsdl' } compileJava.dependsOn generateWsdlClient
运行 gradle build
生成客户端代码。
总结
调用WSDL接口包括生成客户端代码和调用生成的代码。使用 wsimport
生成代码,然后在Java应用中使用生成的服务实现类和服务接口调用远程服务。Maven和Gradle提供了插件来简化生成客户端代码的过程。通过这些步骤,你可以轻松地在Java中调用WSDL接口。