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