axis2 spring集成开发webServices

来源:互联网 发布:爱思助手mac 编辑:程序博客网 时间:2024/04/30 13:50

前段时间在开发一个短信发送的接入功能,涉及到webServices接口的调用和被调用。下面记录下axis2 spring集成开发webServices的步骤(假设web工程已配置ssh集成并已正常运行)。


1、添加所需jar包



2、java类,调用和被调用的主要代码

/**

*调用外部webservices主要代码

/**

private static EndpointReference targetEPR = new  EndpointReference(CmProperties.get("zn_webservice_url"));  //从配置文件中获取webservices接口的调用路径

private static  QName qName = new  QName(CmProperties.get("zn_qname") , "main");  //获取调用的命名空间 和 方法名

public static byte[] callZNWebService(String xml){
        RPCServiceClient serviceClient = null;
try {
serviceClient = new  RPCServiceClient();
} catch (AxisFault e3) {
LOGGER.error("rpc调用出现异常,webservice调用失败.错误信息:"+e3.getMessage());
return null;
}   
        Options options = serviceClient.getOptions();
        options.setTimeOutInMilliSeconds(9000000);
options.setProperty(HTTPConstants.SO_TIMEOUT, 9000000);
options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 9000000);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
        options.setTo(targetEPR);   
        
try {
Object[] args = new  Object[] {xml.getBytes("UTF-8")};
       Class[] returnTypes = new  Class[] { byte[].class  };   
       Object[] response = new Object[]{};
response = serviceClient.invokeBlocking(qName,args, returnTypes);
byte[] result = (byte[])response[0];
       return result;
} catch (Exception e) {
LOGGER.error("webservice调用失败.错误信息:"+e.getMessage());
return null;
}finally{
try {
serviceClient.cleanupTransport();
} catch (AxisFault e) {
LOGGER.error("webservice调用失败.错误信息:"+e.getMessage());
return null;
}
}
}


/**

* SmsService类的方法,提供被调用的webservice接口

*smsReceipt为被调用的方法名

/**

public byte[] smsReceipt(byte[] xmlstr) {
// TODO Auto-generated method stub
BASE64Decoder b64d = new BASE64Decoder();
byte[] re = null;
try {
//约定收到的内容会进行BASE64Decoder编码,所以此处先进行解码
re = b64d.decodeBuffer(new String(xmlstr));

StringReader sr = new StringReader(new String(re,"UTF-8"));
SAXReader saxxmlReader = new SAXReader();
Document d = saxxmlReader.read(new InputSource(sr));
Element root = d.getRootElement();
List<Element> nodeElements = root.elements("note");
if(nodeElements.size()>0){
for(int i=0;i<nodeElements.size();i++){
Element e = nodeElements.get(i);
String staccount = e.elementText("account");
//这里做相关的逻辑处理

}
}
} catch (Exception e) {
logger.error("错误信息"+e.getMessage());
}
return genericAnswerXML("1");
}

private byte[] genericAnswerXML(String code){
String xml = "<root><code>"+code+"</code></root>";
BASE64Encoder b64e = new BASE64Encoder();
byte[] xmlencode = null;
try {
//返回时进行BASE64Decoder编码(约定交互时进行BASE64编码)
xmlencode = b64e.encodeBuffer(xml.getBytes("UTF-8")).getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
logger.error("webservice接口构造成功返回标识时BASE64编码失败。错误信息:"+e.getMessage());
}
return xmlencode;
} *

3、spring配置文件application*.xml的配置

<bean id="smsService" class="cn.ltang.cm.webservice.SmsService">

<!-- 需注入的service类-->
<property name="ecpInfoManager" ref="ecpInfoManager"/>
<property name="smsRecordManager" ref="smsRecordManager"/>
</bean>


4、web.xml配置

<!-- 添加spring监听器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 加载spring的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>



<!-- 注册axis2的servlet -->
<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>


5、在WEB-INF\services\axis\META-INF\目录下配置services.xml(不存在则自己创建)

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
  <service name="smsService">
    <!-- <parameter name="ServiceClass">cn.ltang.cm.webservice.SmsService</parameter> -->
    <parameter name="ServiceObjectSupplier" locked="false">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
    <parameter name="SpringBeanName" locked="false">smsService</parameter>
    <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>
</serviceGroup>


最后,测试,发布。浏览器访问 http://localhost:8080/工程名/services/smsService?wsdl 查看webservices是否发布成功

0 0
原创粉丝点击