axis2 spring集成开发webServices

前段时间在开发一个短信发送的接入功能,涉及到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是否发布成功

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值