java如何访问webservice
访问WebService的方法
Java访问WebService有多种方式,以下是几种常见的方法:
使用JAX-WS生成客户端代码
通过wsimport工具生成客户端代码,适用于基于SOAP的WebService。wsimport是JDK自带的工具,可以根据WSDL文件生成客户端代码。
wsimport -keep http://example.com/service?wsdl
生成代码后,可以直接调用生成的客户端类:

Service service = new Service();
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");
使用Spring WebServiceTemplate
Spring框架提供了WebServiceTemplate来简化WebService调用:

WebServiceTemplate template = new WebServiceTemplate();
template.setDefaultUri("http://example.com/service");
String result = (String) template.marshalSendAndReceive("param");
使用HttpURLConnection直接发送SOAP请求
对于简单的需求,可以直接构造SOAP请求并通过HttpURLConnection发送:
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...>";
OutputStream os = conn.getOutputStream();
os.write(soapRequest.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String response;
while ((response = br.readLine()) != null) {
System.out.println(response);
}
使用第三方库如OkHttp
OkHttp也可以用于发送SOAP请求:
OkHttpClient client = new OkHttpClient();
String soapRequest = "<soapenv:Envelope...>";
RequestBody body = RequestBody.create(soapRequest, MediaType.parse("text/xml"));
Request request = new Request.Builder()
.url("http://example.com/service")
.post(body)
.build();
Response response = client.newCall(request).execute();
String result = response.body().string();
注意事项
- 确保网络连接正常,能够访问WebService地址
- 检查WSDL文件是否有效,确保方法名和参数正确
- 处理可能的异常,如网络异常、SOAP错误等
- 对于复杂的WebService,建议使用工具生成客户端代码
- 考虑性能和安全因素,可能需要添加超时设置和SSL配置






