您的位置:

Java实现轻松调用web服务的技巧

一、使用Java自带的JAX-WS技术

Java自带了JAX-WS(Java API for XML Web Services),这是一个Java EE标准。使用JAX-WS可以轻松调用Web服务。使用JAX-WS调用Web服务主要有3个步骤:

1、首先需要生成客户端代码,生成代码有两种方法,一种是使用wsimport命令,另一种是使用Eclipse IDE自动生成。

// 使用wsimport命令生成
wsimport -keep http://example.com/service?wsdl

// Eclipse IDE自动生成
1. 在Eclipse中,选择 File->New->Other->Web Services->Web Service Client,然后输入Web服务的WSDL URL。
2. 选择生成客户端代码的输出目录和包名,并点击Finish。

2、执行生成的Java类中的方法,该方法通过SOAP协议发送SOAP消息并接收SOAP响应,因此需要使用JAXB(Java Architecture for XML Binding)来将在SOAP请求和响应中传输的XML数据编组和解组。

// 使用Java代码调用Web服务
// 创建服务
Service service = Service.create(new URL("http://example.com/service?wsdl"), new QName("http://example.com/service", "ServiceName"));
// 获取服务端口
Port port = service.getPort(PortName.class);
// 调用服务方法
port.methodName(param1, param2, ...);

3、处理响应结果,根据Web服务返回的数据格式,使用JAXB反序列化响应XML数据并拿到数据。

二、使用Apache的Axis2框架

Apache的Axis2框架是一个流行的Web服务框架,可以用来创建和调用Web服务。使用Axis2框架调用Web服务需要以下步骤:

1、使用wsdl2java命令生成客户端代码。

// 使用wsdl2java命令生成
wsdl2java -uri http://example.com/service?wsdl -d adb -o output/src

// Eclipse插件生成(Axis2 Tools插件)
1. 在Eclipse中,选择 File->New->Other->Axis2 Wizards->Java2WSDL,选择要生成代码的Java类,设定要生成的目录和包路径,并生成相应的WSDL文件。
2. 选择 File->New->Other->Axis2 Wizards->WSDL2Java,选择要生成代码的WSDL文件,设定要生成的目录和包路径,并生成相应的Java类文件。

2、创建ServiceClient对象,设置Web服务的端点地址和方法调用参数。

// 使用Java代码调用Web服务
ServiceClient serviceClient = new ServiceClient();
Options options = new Options();
options.setTo(new EndpointReference("http://example.com/service"));
options.setAction("urn:methodName");
serviceClient.setOptions(options);
// 设置方法参数
OMElement payload = ...;
serviceClient.sendReceive(payload);

3、处理响应结果,这里的响应结果是一个OMElement对象,需要使用AXIOM(Apache XML Object Model)API来解析XML并拿到数据。

三、使用Spring的WebServiceTemplate

Spring框架的WebServiceTemplate类可以方便地调用Web服务。可以通过两种方式创建WebServiceTemplate实例:

1、使用Spring的配置文件

<!-- 创建WebServiceTemplate对象 -->
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
   <property name="marshaller" ref="marshaller"/>
</bean>

2、使用Java代码创建WebServiceTemplate实例

// 使用Java代码调用Web服务
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setDefaultUri("http://example.com/service");
// 设置Marshaller和Unmarshaller
webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(unmarshaller);
// 设置请求消息和响应消息的拦截器
webServiceTemplate.setInterceptors(new ClientInterceptor[] {...});
// 创建请求消息
Object request = ...;
// 调用Web服务
Object response = webServiceTemplate.marshalSendAndReceive(request);

四、结语

本文介绍了三种调用Web服务的技巧,分别是Java自带的JAX-WS技术、Apache的Axis2框架和Spring的WebServiceTemplate类。使用这些技巧,我们可以轻松地调用Web服务并使用相应的响应结果。