由于axis2高版本存在种种未知问题,本文引用的是axis2.1.4的jar包。
开发服务端web service服务
1. 创建web工程,在com.*.webservice包下创建接口实现类
public class Calculate {
public int sum(int num1, int num2) {
return num1 + num2;
}
}
2. 下载axis2-1.4.1-war.zip,链接:
http://ishare.iask.sina.com.cn/f/17037679.html?from=like
解压到文件夹axis2-1.4.1,将lib下的所有jar包拷贝到工程lib目录下,并导入工程
3. 将文件夹axis2-1.4.1下的axis2.war包再次解压,将解压目录下的conf、modules和services文件夹拷贝到web工程的WEB-INF目录下,清空services目录下的内容,创建/myservices(此名称随便)/META-INF/目录,并在此目录下创建services.xml文件,具体路径:WEB-INF/services/myservices/META-INF/services.xml
内容如下:
<service name="AxisService"><!-- web service名称-->
<description>Axis Service Description</description><!-- 接口描述-->
<parameter name="ServiceClass">com.sinosure.webservice.Calculate</parameter><!-- 接口实现类-->
<operation name="sum"><!-- 接口名称-->
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
</service>
4. 修改web.xml文件,内容如下:
……
……
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
5. 运行工程,查看接口描述文件wsdl:http://localhost:8080/###(工程名)/services/AxisService(接口名)?wsdl
在myeclipse中安装axis2客户端代码生成插件Codegen
6. 下载jar包,链接:
http://download.csdn.net/download/Awx/2826319
7. 下载的压缩包里包含Axis2_Codegen_Wizard_1.4.0和Axis2_Service_Archiver_1.3.0这两个文件夹,将其导入%MyEclipse%\Genuitec\MyEclipse 8.x Latest\dropins\目录下,重启MyEclipse,点击new,即可看到下图
[img]
[/img]
8. 重新运行web工程,启动完成后,点击“new”,点击“Axis2 Code Generator”,选择通过wsdl文件产生客户端代码,可选择将axis2的jar一起打包进去,选择生成目录,finish,完成。
测试接口
9. 创建测试java工程,将axis2的jar包导入,将生成的客户端代码文件AxisServiceCallbackHandler.java和AxisServiceStub.java拷贝到java工程中,创建Test类,代码如下:
public static void main(String[] args) {
try {
AxisServiceStub stub = new AxisServiceStub("http://localhost:8080/(工程名)/services/AxisService?wsdl");
AxisServiceStub.Sum sum = new AxisServiceStub.Sum();
sum.setNum1(1);
sum.setNum2(2);
System.out.println(stub.sum(sum).get_return());
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
测试完成。