java如何调用webservice
调用WebService的方法
在Java中调用WebService可以通过多种方式实现,以下是几种常见的方法:
使用JAX-WS生成客户端代码
通过wsimport工具生成客户端代码,这是Java标准库提供的工具。命令如下:

wsimport -keep -p com.example.client http://example.com/service?wsdl
生成代码后,可以直接调用生成的客户端类:
com.example.client.Service service = new com.exampleclient.Service();
com.example.client.ServicePortType port = service.getServicePort();
String result = port.someMethod("param");
使用Apache CXF动态调用
Apache CXF提供了动态调用WebService的能力,无需生成客户端代码:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://example.com/service?wsdl");
Object[] result = client.invoke("someMethod", "param");
String response = (String) result[0];
使用Spring WebServices
Spring框架提供了WebServiceTemplate来简化WebService调用:
WebServiceTemplate template = new WebServiceTemplate();
template.setDefaultUri("http://example.com/service");
String result = template.marshalSendAndReceive("requestPayload");
使用HttpURLConnection手动调用
对于简单的SOAP服务,可以直接发送HTTP请求:
URL url = new URL("http://example.com/service");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setDoOutput(true);
String soapRequest = "<soapenv:Envelope...>...</soapenv:Envelope>";
try (OutputStream os = conn.getOutputStream()) {
os.write(soapRequest.getBytes());
}
try (InputStream is = conn.getInputStream()) {
String response = IOUtils.toString(is, "UTF-8");
}
注意事项
- 确保网络环境可以访问目标WebService
- 检查WSDL文档了解正确的服务端点和方法签名
- 处理可能出现的SOAP Fault异常
- 考虑添加超时设置和重试机制
- 对于生产环境,建议使用连接池管理HTTP连接
以上方法适用于大多数基于SOAP的WebService调用场景,选择哪种方式取决于项目需求和环境限制。






