java 调用wsdl接口 大神帮忙讲解一下

调用WSDL(Web Services Description Language)接口需要以下几个步骤:

  1. 生成客户端代码:使用工具如 wsimport 生成与WSDL对应的Java客户端代码。
  2. 调用生成的客户端代码:使用生成的代码创建服务对象并调用服务方法。

详细步骤

1. 使用 wsimport 生成客户端代码

wsimport 是JDK自带的工具,用于根据WSDL文件生成客户端代码。假设你的WSDL文件位于 http://example.com/service?wsdl,在命令行中运行:

sh
wsimport -keep -s src -d bin http://example.com/service?wsdl

选项解释:

  • -keep:保持生成的源代码。
  • -s src:指定源代码的生成目录。
  • -d bin:指定编译的类文件目录。

生成的代码通常包括服务接口、服务实现类和数据类型类。

2. 调用生成的客户端代码

假设生成了一个服务接口 MyService 和服务实现类 MyServiceImpl。以下是调用服务的方法:

java
import 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代码。这些代码包括:

  • 服务接口:定义了服务的方法。
  • 服务实现类:实现了服务接口,并提供了创建服务接口实例的方法。
  • 数据类型类:用于表示服务方法的输入和输出数据类型。

调用服务方法

  1. 创建服务实现类的实例

    java
    MyServiceImpl serviceImpl = new MyServiceImpl();

    这是生成的服务实现类,用于访问服务接口。

  2. 获取服务接口

    java
    MyService service = serviceImpl.getMyServicePort();

    getMyServicePort 是服务实现类中的一个方法,返回服务接口的实例。

  3. 调用服务方法

    java
    String result = service.someMethod("inputParameter");

    使用服务接口的实例调用服务方法,并传递必要的参数。

  4. 处理异常

    java
    catch (Exception e) { e.printStackTrace(); }

    捕获并处理调用过程中可能出现的异常。

示例项目结构

假设你的项目结构如下:

scss
MyProject │ 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-pluginpom.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 中添加以下配置:

groovy
plugins { 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接口。