一、下载部署AXIS2
我这里是把AXIS2部署的自己的项目中,首先去AXIS2的官网下载二进制开发包 -->直接点击下载 axis2-1.6.2-bin.zip
或者去官网下载 --> http://axis.apache.org/axis2/java/core/download.cgi#std-bin 如图选择zip版本就好了
二、jar包选择,比较精选了23个如图:
三、编写服务用于发布
package com.newtouch.component.axis2.service;
import com.axis2.util.SalesInfoUtil;
/**
* @since: 2014年4月14日
* @author ZhangChen
* @description:axis2 服务类
*/
public class QuerySaleInfo {
public String querySaleInfo(String xml){
SalesInfoUtil siu = new SalesInfoUtil(); //调用方法类
//analysisXML返回的是一个封装好的String的xml格式数据
//处理逻辑都在analysisXML方法里这里不多说了
return siu.analysisXML(xml);
}
四、web.xml中添加代码
<!-- axis2 start--> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <!-- axis2 end-->
五、在WEB-INF目录下添加services文件夹添加services.xml发布服务:
1、 从二进制开发包中把\axis2-1.6.2-bin\axis2-1.6.2\repository\下的services文件夹(里面有services.list和version.aar)复制到WEB-INF下
2、 WEB-INF-->services-->MyService-->META-INF-->services.xml
特别注意:在weblogic中部署需要把我们写好的services.xml替换掉services目录下version-1.6.2.aar中的services.xml文件否则会报异常:<Error> <HTTP> <BEA-101214> <Included resource or file "/axis2-web/listSingleService.jsp" not found from requested resource "/CACore/services/QuerySaleInfo".>
六、services.xml内容 (注意本次发布的服务使用的是RPC方式)
<service name="QuerySaleInfo"> <description> MyService </description> <parameter name="ServiceClass"> com.axis2.service.QuerySaleInfo </parameter> <operation name="querySaleInfo"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> </service>
七、查看发布的服务
1、查看wsdl:
http://localhost:8080/CACore/services/QuerySaleInfo?wsdl
2、查看发布服务(这个不能直接查看需要把二进制安装包中的axis2-we(找不到的:axis2-1.6.2-bin\axis2-1.6.2\webapp\axis2-web)b复制到WebRoot目录下与WEB-INF同级,里面的文件夹全部要jsp只要listServices.jsp就好)
http://localhost:8080/CACore/services/listServices 结果如图:里面的QuerySaleInfo就是发布的服务
这样我们的AXIS2 webservice服务就部署成功了,后续送上客户端使用axis的Server和Call调用AXIS2发布的webservice服务~
在客户端调用axis的Service和Call的方式访问webservice服务。
(接口相关:之前写的使用AXIS2部署WEBSERVCE服务-->AXIS2部署WebService实战)
一、首先需要引入AXIS的jar包,如下:
axis.jaraxis-ant.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
jaxrpc.jar
saaj.jar
wsdl4j.jar
二、调用代码
package com.test;
import java.net.URL;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
*
* @since: 2014年5月7日
* @author ZhangChen
* @description:WebService客户端调用测试
*/
public class Test {
public static void main(String[] args) throws Exception {
try
{
String url = "http://localhost:8080/CACore/services/QuerySaleInfo?wsdl";
Service serv = new Service();
Call call = null;
call = (Call) serv.createCall();
//下面这两段代码,是为了处理返回的特殊类型写的,
//如果只是简单地返回基本类型,可以不用写这两段代码;
QName qn=new QName("http://service.axis2.component.newtouch.com", "querySaleInfo");
// 注册序列化和反序列化类
call.registerTypeMapping(String.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(String.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(String.class, qn));
call.setTargetEndpointAddress(new URL(url));
/*
* 这里的new QName的URL,就是要指向的命名空间的名称了,
* 这个URL地址在你的wsdl打开后可以看到的,上面有写着
* targetNamespace="http://www.foresee.com.cn/spiderweb/webservice",
* 这个就是你的命名空间值了;
*/
call.setOperationName(qn);
// 接口的参数
call.addParameter("xml", org.apache.axis.Constants.XSD_STRING
,javax.xml.rpc.ParameterMode.IN);
//设置返回类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
call.setSOAPActionURI(url);
String xml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\r\n"+
"<Root>"+
"<TransData>"+
"<TransHead>"+
"<TransType>211313</TransType>"+
"<TransDate>2014-04-18</TransDate>"+
"<TransTime>18:12:40</TransTime>"+
"<Reserve>"+
"<Resv1></Resv1>"+
"<Resv2></Resv2>"+
"<Resv3></Resv3>"+
"<Resv4></Resv4>"+
"<Resv5></Resv5>"+
"</Reserve>"+
"</TransHead>"+
"<TransBody>"+
"<AgentCode>010100000001026</AgentCode>"+
"<AgentLicNo>002</AgentLicNo>"+
"<AgentGroup></AgentGroup>"+
"<Resv1></Resv1>"+
"<Resv2></Resv2>"+
"<Resv3></Resv3>"+
"<Resv4></Resv4>"+
"<Resv5></Resv5>"+
"</TransBody>"+
"</TransData>"+
"</Root>";
String xml1 = (String) call.invoke(new Object[] {xml});
System.out.println(xml1);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}