示例项目:springmvc+mybatis+spring+freemarker+maven示例项目,只是普通的web项目,这里在这个项目的基础上,引入axis2,实现发布webservice服务!
新增AxisServlet拦截串
<!--axis2 WebService配置信息开始 --> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- axis2 WebService配置信息结束 -->
在/WEB-INF/下手动创建目录/services/service/META-INF/
<?xml version="1.0" encoding="UTF-8"?> <ServiceData> </ServiceData>
<?xml version="1.0" encoding="UTF-8"?> <!-- 对外发布的WebService名字 --> <service name="AxisService"> <description>Spring 整合例子 </description> <parameter name="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier </parameter> <!-- 配置在applicationContext中配置的bean,这里的值域bean中的id事一样的,否则就报错找不到bean错 --> <parameter name="SpringBeanName">axisService</parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service>
新增bean配置
<bean id="axisService" class="com.gxx.record.service.impl.AxisService"></bean>
package com.gxx.record.service.impl; /** * Axis2实现的WebService * @author Gxx */ public class AxisService { /** * 计算加法 d1+d2 */ public Integer jiafa(Integer d1, Integer d2) { return d1+d2; } }
执行main方法得到结果
package com.gxx.record.webservice; import javax.xml.namespace.QName; import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; /** * 测试WebService * @author Gxx */ public class TestWebservice { /** * 测试 * @throws Exception */ public void test() throws Exception { String url = "http://localhost:8080/record/services/AxisService?wsdl"; try { // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference(url); Options options = serviceClient.getOptions(); // 确定目标服务地址 options.setTo(targetEPR); // 确定调用方法 options.setAction("urn:jiafa"); options.setTimeOutInMilliSeconds(60000); // 上图中的targetNamespace QName qname = new QName("http://impl.service.record.gxx.com","jiafa"); // 指定jiafa方法的参数值 String requestContent = ""; try { } catch (Exception e) { throw new Exception(e.getMessage(), e.getCause()); } Object[] parameters = new Object[] {20,30}; // 指定getPrice方法返回值的数据类型的Class对象 Class[] returnTypes = new Class[] { String.class }; // 调用方法一 传递参数,调用服务,获取服务返回结果集 OMElement element = serviceClient.invokeBlocking(qname, parameters); // 值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 String result = element.getFirstElement().getText(); System.out.println(result); } catch (AxisFault e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { new TestWebservice().test(); } }