基于jax-ws webservice开发中spring与axis2整合问题

最近做一个联通彩信接入的上行模块开发时碰到的问题。

需求描述:开发一个webservice接收来自彩信中心的消息(MO)

使用框架:spring2.5.3 + axis2 1.4.1 (jax-ws2.0) + mina

问题描述:由于是使用jax-ws技术因此根据WSDL生成的代码为annotation的,因此无需配置即可在axis2中发布,所以问题出现:

1、想通过配置来对象注入到service中无法实现(在此时没找到解决此问题的部分)。

2、在serivce中使用axis2 api读取soap消息,消息始终为null。

(如果不使用annotation来描述webservice,是可以使用配置来注入bean的,在server端也能正常的读取soap消息。)

解决办法:(既然是使用annotation来描述webservice,那当然得用spring annotation来注入了。读取soap消息也一样)

1、用@Autowired来修饰需注入的bean,目标类需继承SpringBeanAutowiringSupport(这个功能应该是在2.5.3的版本中增加的)。

2、使用@Resource来修饰需要捕获的soap消息。

代码:

import java.util.Map;

import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;

@WebService(targetNamespace = "http://www.demon.service",serviceName = "HelloService", name = "demon")
public class Hello extends SpringBeanAutowiringSupport{
    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(Hello.class);
    @Autowired
    private XXBean bean;//此处的bean的名称要与spring中bean的id一致。   
   
    @Resource
    WebServiceContext wsContext;
   
    @WebMethod(operationName = "sayHello")
    public String sayHello(String name){
    javax.xml.ws.handler.MessageContext context = wsContext.getMessageContext();

    }

}

参考资料:http://docs.huihoo.com/spring/2.5.x/zh-cn/remoting.html

https://jax-ws.dev.java.net/articles/MessageContext.html

相关推荐