一、下载axis2-1.5.4-bin.zip文件并解压。设置axis2的环境变量 "AXIS2_HOME"
将axis2-1.6.2-bin.zip解压到本地目录D:\axis2-1.6.2
设置环境变量。【注:前提需要配置java环境变量】
AXIS2_HOME 设置值 D:\axis2-1.6.2
Path 添加值 %AXIS2_HOME%\bin
二、新建web项目,然后将axis2-1.5.4-bin下面的conf、repository下的modules和services复制到WEB-INF目录,conf下面只需要axis2.xml文件,最后的结构
三、新建包com.lc.service并新建文件NumService.java
package com.lc.service; public class NumService { public Integer getSum(Integer num1, Integer num2) { return num1 + num2; } public void sayHello(){ System.out.print("hello"); } }
四、在services下面新建一个文件夹,文件名随意,再在下面新建META-INF目录,里面存放自己的services.xml,里面配置自己的服务信息
<?xml version="1.0" encoding="UTF-8"?> <serviceGroup> <!--类处理器--> <service name="third_join" targetNamespace="http://ws.apache.org/axis2/services/SVCUserManager/"> <description>ipop third join service entrance.</description> <!--类路径--> <parameter name="ServiceClass" locked="false"> com.lc.service.NumService </parameter> <!--方法处理器--> <operation name="sayHello"> <!--无返回值的处理器--> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation> <operation name="sayHello2"> <!--有返回值的处理器--> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="getSum"> <!--有返回值的处理器--> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service> </serviceGroup>
四、编辑web.xml加入如下代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://Java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <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> </web-app>
五、新建weblogic.xml文件
适用于weblogic 服务器解决 java.lang.NoSuchMethodError: javax.xml.namespace.QName.<init>(Ljava/lang/String;
Ljava/lang/String;Ljava/lang/String;)V 问题
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> <weblogic-web-app> <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> <context-root>StockQuoteWS</context-root> </weblogic-web-app>打包发布 http://localhost:8080/services/third_join?wsdl
调用方法 http://localhost:8080/services/third_join/getSum?num1=1&num2=2
六、客户端调用
public class TestMain { public static void main(String[] args) throws AxisFault { try { RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); String address = "http://localhost:8080/services/third_join"; EndpointReference epf = new EndpointReference(address); options.setTo(epf); //一、有参调用 //参数一:在网页上执行 wsdl后xs:schema标签的targetNamespace路径(包名倒过来即可 ) 参数二:要调用的方法名 QName qName = new QName("http://service.lc.com","getSum"); // 3:方法的第一个参数,2:方法的第二个参数 Integer.class返回值类型 Object[] result = client.invokeBlocking(qName, new Object[]{3,2}, new Class[]{Integer.class}); System.out.println(result[0]); //一、无参调用 //参数一:在网页上执行 wsdl后xs:schema标签的targetNamespace路径(包名倒过来即可 ) 参数二:要调用的方法名 QName qName2 = new QName("http://service.lc.com","sayHello2"); // 3:方法的第一个参数,2:方法的第二个参数 Integer.class返回值类型 Object[] result2 = client.invokeBlocking(qName2, new Object[]{}, new Class[]{String.class}); System.out.println(result2[0]); }catch (Exception e){ e.printStackTrace(); } } }
< !DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd" >
<weblogic-web-app >
<container-descriptor >
<prefer-web-inf-classes>true</prefer-web-inf-classes>
< /container-descriptor >
<context-root >StockQuoteWS < /context-root >
< /weblogic-web-app >