axis2 spring整合開發webServices

來源:互聯網
上載者:User

前段時間在開發一個簡訊發送的接入功能,涉及到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是否發布成功

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.