java 如何调用 wsdl
调用 WSDL 的步骤
在 Java 中调用 WSDL(Web Services Description Language)通常涉及生成客户端代码并与 Web 服务交互。以下是具体方法:
使用 wsimport 工具生成客户端代码
wsimport 是 JDK 自带的工具,用于根据 WSDL 文件生成客户端代码。通过命令行运行以下命令:
wsimport -keep -verbose http://example.com/service?wsdl
-keep保留生成的源文件。-verbose显示详细日志。 生成的代码包括服务接口、数据绑定类等,可直接用于调用服务。
通过 JAX-WS 动态调用
无需生成客户端代码,直接通过 JAX-WS API 动态调用 Web 服务:
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.URL;
URL wsdlUrl = new URL("http://example.com/service?wsdl");
QName serviceName = new QName("http://example.com/", "ServiceName");
Service service = Service.create(wsdlUrl, serviceName);
MyService port = service.getPort(MyService.class);
String result = port.serviceMethod("param");
使用 Apache CXF 或 Axis2
第三方库如 Apache CXF 或 Axis2 提供更灵活的功能:
- Apache CXF:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(MyService.class); factory.setAddress("http://example.com/service"); MyService client = (MyService) factory.create(); String result = client.serviceMethod("param"); - Axis2:
通过
wsdl2java生成代码后,使用Stub类调用服务。
处理 SOAP 请求和响应
调用时可能需处理 SOAP 头或安全配置:
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username");
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password");
注意事项
- 确保 WSDL 可访问且格式正确。
- 检查网络连接和防火墙设置。
- 对于复杂服务,可能需要自定义数据类型映射或拦截器。
以上方法适用于大多数基于 SOAP 的 Web 服务调用场景。根据项目需求选择合适的方式,生成客户端代码或动态调用均可实现功能。







