加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Axis创建webservice客户端和服务端

发布时间:2020-12-17 00:14:18 所属栏目:安全 来源:网络整理
导读:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者: 永恒の_☆ 地址: http://www.voidcn.com/article/p-xkhqhxav-bhs.html 一、Axis的介绍 Web Service是现在最适合实现SOA的技术,而Axis
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。
作者: 永恒の_☆ 地址: http://www.voidcn.com/article/p-xkhqhxav-bhs.html

一、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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读