Spring对WebService的支持
来源:http://ajava.org/readbook/open/spring2bd/15858.html
Spring使用ServletEndpointSupport来暴露WebService。假设有如下接口:
//业务接口
public interface Hello
{
public String hello(String name);
}
以及如下的实现类:
//实现类,实现上面的业务接口
public class HelloImpl implements Hello
{
//实现业务接口必须实现的方法
public String hello(String name)
{
return name + "你好,欢迎学习Spring和Axis";
}
}
上面是非常简单的面向接口编程的应用结构,一个接口以及对应的实现类。如果需要将该实现类暴露成WebService,则编写一个WebService类,让该类实现Hello接口,并继承ServletEndpointSupport类。该类的源代码如下:
//实现Hello接口,继承ServletEndpointSupport工具类
public class HelloEndpoint extends ServletEndpointSupport implements Hello
{
//将真实的业务bean包装成WebService
private Hello h;
//该方法由Spring调用,将目标业务bean注入。
protected void onInit()
{
this.h = (Hello) getWebApplicationContext().getBean("hello");
}
//将业务bean的业务方法暴露成WebService
public String hello(String name)
{
return h.hello(name);
}
}
然后提供Spring的配置文件,配置文件中部署业务bean,配置文件如下:
"http://www.springframework.org/dtd/spring-beans.dtd">
然后修改web.xml文件,让AxisServlet拦截某些请求,这是Axis必需的。web.xml的详细配置如下:
"http://java.sun.com/dtd/web-app_2_3.dtd">
org.springframework.web.context.ContextLoaderListener
AxisServlet
org.apache.axis.transport.http.AxisServlet
AxisServlet
/axis/*
配置文件中,看到所有匹配/axis/*模式的请求都由AxisServlet处理。即:Spring发布的WebService都在axis下。然后编写wsdl文件,或者使用工具生成。wsdl文件如下:
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
http://xml.apache.org/axis/wsdd/
经过这些步骤,可将部署在Spring的普通bean发布成WebService。