服务器端开发:
1.首先创建一个web project;
2.依旧是接口类和实现类;
@WebService
public interface Hello {
public String sayHello(String name);
}
public class HelloImpl implements Hello {
@Override
public String sayHello(String name) {
return "Hello" + name;
}
}
3.去apache官网下载axis2的war包:axis2-1.6.0-war.zip,解压后打开文件夹可以找到axis2.war,再将axis.war解压开;
4.引入axis2的相关jar包,将刚刚解压出来的axis2-web文件夹复制到web项目中的WebRoot下;
该文件夹是axis2的web控制台信息,如不使用,则该步骤可以跳过;
5.将解压文件夹下的WEB-INF下的相关文件复制到工程中的WEB-INF下;
6.修改web.xml文件配置;
<servlet><display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class></servlet>
<servlet-mapping><servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet><display-name>Apache-Axis AxisAdmin Servlet (Web Admin)</display-name>
<servlet-name>AxisAdminServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet><servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping><servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping><servlet-mapping>
<servlet-name>AxisAdminServlet</servlet-name>
<url-pattern>/axis2-admin/*</url-pattern>
</servlet-mapping>
7.修改services.xml配置
<serviceGroup>
<service name="HelloService">
<description>AxisService</description>
<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>
<parameter name="ServiceClass">com.axis2.hello.impl.HelloImpl
</parameter>
</service>
</serviceGroup>
8.将上面ws_axis2_service工程打包发布到tomcat7中,然后启动服务,在IE中输入
http://localhost:8080/ws_axis2_service/services/HelloService?wsdl
二.客户端开发
Axis2的客户端调用方式很多,这里介绍两种最常用的方式:一种是生成客户端接口,通过接口调用;另一种:通过RPC调用,不需要生成客户端接口;这里都在java工程ws_axis2_client工程中的Junit环境下做的测试。
1.接口调用
a.打开cmd命令窗口,找到cxf安装包中的bin目录(如下):
F:\jar\axis2\axis2-1.6.1\bin>wsdl2java -uri http://localhost:8080/ws_axis2_servi
ce/services/HelloService?wsdl -p com.axis2.proxy -o stub
说明:-p 包名路径,最好和项目中的包名对应,这样生成的代码无需修改。
-o 生成的代码的位置,这是指当前目录下的stub文件目录。
-uri 后面就是服务端生成的wsdl。
b.将生成的stub下的代码Copy到我们的工程中,也可以将客户端代码编译后打包引入进工程中(如果生成的文件很多建议打成包)
c.引入客户端调用的包
d.测试代码
@Test
public void testSayHello() throws Exception {
try {
HelloServiceStub stub = new HelloServiceStub() ;
HelloServiceStub.SayHello sh = new HelloServiceStub.SayHello() ;
sh.setName(" gary") ;
String res = stub.sayHello(sh).get_return() ;
System.out.println("return:"+res);
} catch (Exception ex) {
ex.printStackTrace();
}
}
2.RPC远程调用
a.导入所需要的jar包,这个从axis2包中COPY
b.测试代码
@Test
public void testSayHello() throws AxisFault {
RPCServiceClient serviceClient = serviceClient = new RPCServiceClient();String url = "http://localhost:8080/ws_axis2_service/services/HelloService?wsdl";
Object[] obj = new Object[] { "gary" };try {
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
Class[] classes = new Class[] { String.class }; // 返回的类型为String QName opAddEntry = new QName("http://impl.hello.axis2.com",
"sayHello");
String xml = (String) serviceClient.invokeBlocking(opAddEntry, obj,classes)[0];
System.out.println("xml:" + xml);
} catch (AxisFault e) {
e.printStackTrace();
}
}