Axis1框架出来也很久了,很多公司的老项目也是使用的该框架实现WebService的调用,对于新入行的小伙伴来说有很大机率会维护以前的老项目,所以这里也给大家介绍下怎么使用Axis1框架调用服务端.
调用方式有两种,一种是通过WSDL文件生客户端调用代码,通过生成的代码来调用,此种方式比较直观,就象本地调用接口方法一样,但比较麻烦点的就是需要先生成客户端代码,执行一个编译命令,如下:
java -Djava.ext.dirs=E:\axis-1_2_1\lib(axis的jar包所在目录) org.apache.axis.wsdl.WSDL2Java -p test.wsdl(指定代码路径) E:\axis-1_2_1\Test\CSSFaultService.wsdl(本地WSDL文件)
通过上面的命令会在指定目录下生成相应的客户端代码,主要看生成的代码中后面为(Soap_BindingStub和ServiceLocator)的类,然后通过客户端代码即可调用对方WebService服务端
//在根据WSDL文件生成的类中有 带有LOCATOR和BINDINGSTUB的两个类,实现这两个类按如下方式调用即可
FSMInterfaceServerServiceLocator serverServiceLocator=new FSMInterfaceServerServiceLocator();
serverServiceLocator.setEOMSProcessServiceEndpointAddress("http://10.120.136.232:8080/fsm/services/EOMSProcessService");
EOMSProcessServiceSoapBindingStub serviceSoapBindingStub=(EOMSProcessServiceSoapBindingStub)
serverServiceLocator.getEOMSProcessService();
serviceSoapBindingStub.setTimeout(60000);
String testStr=serviceSoapBindingStub.isAlive();
System.out.print("调用EOMS接口返回===="+testStr);
另一种方法就是使用Axis1框架自带的API接口调用,主要注意wsdlUrl,nameSpaceUri,目标方法几个参数即可,如下:
------另一种调用方式
String serSupplier = "FSM";
String serCaller = "HEMEOMS";
String callerPwd = "Hem_eoms8089";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));
call.setOperationName(new QName(nameSpaceUri,"queryUserMehtod"));
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
call.addParameter("serSupplier", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("serCaller", org.apache.axis.encoding.XMLType.SOAP_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("callerPwd", org.apache.axis.encoding.XMLType.SOAP_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("callTime", org.apache.axis.encoding.XMLType.SOAP_STRING, javax.xml.rpc.ParameterMode.IN);
call.addParameter("opDetail", org.apache.axis.encoding.XMLType.SOAP_STRING, javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result = (String)call.invoke(new Object[]{serSupplier, serCaller, callerPwd, sdf.format(new Date()),opDetail});
response.getWriter().print("返回的值===="+result);