java如何调webservice
调用WebService的方法
在Java中调用WebService可以通过多种方式实现,以下是几种常见的方法:
使用JAX-WS生成客户端代码
JAX-WS是Java API for XML Web Services的缩写,可以用于创建和调用WebService。
下载WebService的WSDL文件,通过wsimport工具生成客户端代码:
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框架,可以简化WebService的调用。
添加CXF依赖到项目中:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.4.0</version>
</dependency>
通过CXF的JaxWsProxyFactoryBean创建客户端代理:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ServicePortType.class);
factory.setAddress("http://example.com/service");
ServicePortType client = (ServicePortType) factory.create();
String result = client.someMethod("param");
使用Spring Web Services
Spring WS是Spring框架的WebService扩展,提供更高级的WebService调用功能。
添加Spring WS依赖:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>3.0.10.RELEASE</version>
</dependency>
配置WebServiceTemplate并调用服务:
WebServiceTemplate template = new WebServiceTemplate();
template.setDefaultUri("http://example.com/service");
StringSource request = new StringSource("<request>param</request>");
StringResult result = new StringResult();
template.sendSourceAndReceiveToResult(request, result);
String response = result.toString();
使用HttpURLConnection直接调用
对于简单的WebService调用,可以直接使用HttpURLConnection发送SOAP请求。
构建SOAP请求并发送:

URL url = new URL("http://example.com/service");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.setDoOutput(true);
String soapRequest = "<soapenv:Envelope>...</soapenv:Envelope>";
OutputStream os = connection.getOutputStream();
os.write(soapRequest.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = br.lines().collect(Collectors.joining());
注意事项
- 确保网络连接正常,能够访问WebService地址
- 检查WSDL文件是否有效,服务是否可用
- 处理可能的异常情况,如网络超时、服务不可用等
- 对于需要认证的服务,添加适当的认证头信息
选择哪种方法取决于项目需求和环境。JAX-WS和CXF适合需要完整WebService支持的项目,而直接HTTP调用适合简单场景。






