java 如何调用 wsdl
调用 WSDL 的步骤
使用 wsimport 工具生成客户端代码
在 Java 中调用 WSDL 服务,可以通过 JDK 自带的 wsimport 工具生成客户端代码。该工具能够解析 WSDL 文件并生成相应的 Java 类和接口。
运行以下命令生成客户端代码:
wsimport -keep -verbose http://example.com/service?wsdl
-keep 参数保留生成的源文件,-verbose 显示详细输出信息。生成的代码包括服务接口、数据绑定类等。
通过生成的客户端调用服务
生成代码后,可以直接在 Java 项目中导入并使用这些类。示例代码如下:
import com.example.Service;
import com.example.ServicePortType;
public class WsdlClient {
public static void main(String[] args) {
Service service = new Service();
ServicePortType port = service.getServicePort();
String result = port.someMethod("parameter");
System.out.println("Result: " + result);
}
}
Service 和 ServicePortType 是生成的类,具体名称取决于 WSDL 中的定义。
使用 Apache CXF 动态调用
如果需要动态调用 WSDL 服务,可以使用 Apache CXF 框架。CXF 提供了更灵活的方式来调用 Web 服务,无需预先生成代码。
添加 CXF 依赖:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.5.5</version>
</dependency>
动态调用示例:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class DynamicWsdlClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ServicePortType.class);
factory.setAddress("http://example.com/service");
ServicePortType client = (ServicePortType) factory.create();
String result = client.someMethod("parameter");
System.out.println("Result: " + result);
}
}
处理复杂数据类型
如果 WSDL 服务涉及复杂数据类型,确保生成的客户端代码包含相应的数据绑定类。在使用时,直接实例化这些类并填充数据。
示例:
import com.example.ComplexType;
ComplexType request = new ComplexType();
request.setField1("value1");
request.setField2(123);
String result = port.complexMethod(request);
配置安全性和超时
对于需要认证或超时设置的 WSDL 服务,可以通过绑定提供者配置。示例配置如下:
import javax.xml.ws.BindingProvider;
import java.util.Map;
Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, "username");
requestContext.put(BindingProvider.PASSWORD_PROPERTY, "password");
requestContext.put("javax.xml.ws.client.connectionTimeout", "5000");
requestContext.put("javax.xml.ws.client.receiveTimeout", "10000");
使用 SOAPUI 测试 WSDL
在开发阶段,可以使用 SOAPUI 工具测试 WSDL 服务是否可用。SOAPUI 提供了图形界面,方便发送请求和查看响应。通过测试可以验证服务端点、操作和数据类型是否正确。







