一、使用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服务并使用相应的响应结果。