作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/article/details/9318317
一、Axis的介绍
Web Service是现在最适合实现SOA的技术,而Axis是实现Web Service的一种技术框架(架构)。
二、Axis的准备条件
所需要的jar包:
axis.jar
jaxrpc.jar
saaj.jar
wsdl4j-1.5.1.jar
commons-discovery-0.2.jar
xbean.jar
下载地址:http://download.csdn.net/detail/ch656409110/5747129
三、创建webservice服务端
1、先将jar包放入lib目录
2、在web.xml中配置axis监听器和核心servlet
<!-- axis配置 -->
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>Axis Admin Servlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3、创建一个xml, 名字叫server-config.wsdd 放在WEB-INF根目录
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<service name="houseWebService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.struts2.webservice.server.HouseWebServiceImpl"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>
</deployment>
4、根据配置再创建webservice服务端的实现类
1、定义接口HouseWebService.java
public String getHouseList(String xmlStr);
2、实现该接口HouseWebServiceImpl.java
可以随便返回一些字符串即可。
5、保存,发布项目,启动tomcat
在地址栏输入:http://localhost:8080/house/services/houseWebService?wsdl 即可看到发布的服务端的明细。
如下:
这就表示Axis发布的webservice服务端成功了。
6、通过客户端调用服务端webservice
/**
* 调用webservice路口
* @param endpoint 地址
* @param methodName 调用的方法
* @param xmlStr 传递的xml字符串参数
* @return
*/
public String invoke(String endpoint,String methodName,String xmlStr){
Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (ServiceException e) {
e.printStackTrace();
}
QName qn = new QName(methodName);
call.setOperationName(qn);
call.setTargetEndpointAddress(endpoint);
call.setUseSOAPAction(true);
String result = "";
try {
// 给方法传递参数,并且调用方法
result = (String) call.invoke(new Object[] { xmlStr });
} catch (RemoteException e) {
e.printStackTrace();
}
System.out.println("result is " + result);
return result;
}
public List<House> getHouseList() {
String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ " <house>"
+ " <condition>"
+ " <title>便宜</title>"
+ " <price></price>"
+ " <streetname></streetname>"
+ " <typename></typename>"
+ " <floorage>100</floorage>"
+ " <pageno></pageno>"
+ " <pagesize></pagesize>"
+ " </condition>"
+ " </house>";
String result = invoke("http://localhost:8080/house/services/houseWebService","getHouseList",xmlStr);
}
在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。
如果用axis调用axis的服务端使用使用起来很方便,但是调用cxf的服务端容易出错。
比如:如果在调用的时候没有指定命名空间,就不行。
在调用的时候不指定调用的参数以及返回的结果类型,就收不到客户端发送的参数。可以看看:http://blog.csdn.net/ch656409110/article/details/9310789