JAVA 访问webService的几种方法整理(一) Axis

axis全称Apache EXtensible Interaction System 即阿帕奇可扩展交互系统。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。但Axis并不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎(例如Tomcat)的服务器。

组件包(所需jar):

axis.jar
jaxrpc.jar
saaj.jar
commons-logging.jar
commons-discovery.jar
wsdl4j.jar
 
注:测试过程中并没有加入saaj.jar 运行通过
 
摘自: 百度百科

 

 

 

 

实例:直接通过AXIS调用远程的web service

 
调用代码:
	try {
	    String urlname = "http://localhost:8080/WebServiceTest/services/serviceT?wsdl" ;

            Service s = new  Service();

            Call call = (Call) s.createCall();

            call.setTimeout(new Integer(5000));

            call.setOperation( "webS" );//访问webservice方法名

            call.setTargetEndpointAddress(urlname);//webservice地址

               

            Object[] param = { "ceshi1","ceshi2"};

            String val = (String)call.invoke(param);

            System.out .println( "webS :"  + val);

	} catch (Exception e) {
	<span style="white-space:pre">	</span>e.printStackTrace();
	}
	

运行时异常:java.lang.NoClassDefFoundError: org.apache.commons.logging.LogFactory

添加 commons-logging-1.0.4.jar 后,java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

添加commons-discovery-0.2.jarjava.lang.NoClassDefFoundError: javax/wsdl/OperationType (缺少wsdl的jar)

添加javax.wsdl_1.6.2.v201012040545.jar 或者wsdl4j.jar 均可

之后报错:
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXException: Bad envelope tag:  definitions
 faultActor: 
 faultNode: 
 faultDetail: 
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException:Bad envelope tag:  definitions
但是在浏览器里wsdl可以正常打开
解决方案:是把wsdl的地址中的 ?wsdl 去除掉就正常了。。。原因暂时未知

axis调用webservice的某些参数的设置:
<span style="white-space:pre">	</span>    String endpoint = "http://localhost:8080/WebServiceTest/services/serviceT" ;
	    String result ="no result!";  
	    Service service = new Service();  
	    Call call;  
	    try {  
	    	call=(Call)service.createCall();  
 			call.setTargetEndpointAddress(endpoint);//远程调用webservice路径  
 			call.setOperationName("webS");//调用的方法名  
	      //设置参数名:  
	       
 			call.addParameter("w", //参数名  
 					org.apache.axis.encoding.XMLType.XSD_STRING,//参数类型:String  
 					javax.xml.rpc.ParameterMode.IN);//参数模式:'IN' or 'OUT'  
	      
 			call.addParameter("s", //参数名  
 					org.apache.axis.encoding.XMLType.XSD_STRING,//参数类型:String  
 					javax.xml.rpc.ParameterMode.IN);//参数模式:'IN' or 'OUT'  
	      //设置返回值类型:  
 			call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//返回值类型:String  
 			String str1="ceshi1";  
 			String str2="ceshi2";  
 			result = (String)call.invoke(new Object[]{str1,str2});//远程调用  
 			System.out.println(result);
	     } catch (Exception e) {  
	    	 e.printStackTrace();  
	     }  




文章参考地址:
http://blog.csdn.net/lxqluo/article/details/6968599
http://mazhihui.iteye.com/blog/1012732

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值