WebServiceServletEndpointSupport
来源:互联网 发布:淘宝国际有假货吗 编辑:程序博客网 时间:2024/06/07 05:46
Spring对WebService的支持
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,配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring 配置文件的文件头,包含DTD等信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<!-- Spring配置文件的根元素-->
<beans>
<!-- 配置Spring的业务bean-->
<bean id="hello" class="lee.HelloImpl"/>
</beans>
然后修改web.xml文件,让AxisServlet拦截某些请求,这是Axis必需的。web.xml的详细配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Web应用配置文件的文件头,包含dtd等信息-->
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<!-- Web应用配置文件的根元素-->
<web-app>
<!-- 用于初始化ApplicationContext的listener-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 定义AxisServlet-->
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<!-- 映射AxisServlet,使用通配符-->
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/axis/*</url-pattern>
</servlet-mapping>
</web-app>
配置文件中,看到所有匹配/axis/*模式的请求都由AxisServlet处理。即:Spring发布的WebService都在axis下。然后编写wsdl文件,或者使用工具生成。wsdl文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- wsdl的根元素,包含schema等信息-->
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- wsdl的全局配置-->
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="axis.sendMinimizedElements" value="true"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<!-- 定义WebService的管理台-->
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<!-- 定义自己的WebService-->
<service name="HelloService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<!-- 定义WebService的实现类-->
<parameter name="className" value="lee.HelloEndpoint"/>
</service>
<!-- 定义WebSerivice的系统服务。-->
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
经过这些步骤,可将部署在Spring的普通bean发布成WebService。
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,配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring 配置文件的文件头,包含DTD等信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<!-- Spring配置文件的根元素-->
<beans>
<!-- 配置Spring的业务bean-->
<bean id="hello" class="lee.HelloImpl"/>
</beans>
然后修改web.xml文件,让AxisServlet拦截某些请求,这是Axis必需的。web.xml的详细配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Web应用配置文件的文件头,包含dtd等信息-->
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<!-- Web应用配置文件的根元素-->
<web-app>
<!-- 用于初始化ApplicationContext的listener-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 定义AxisServlet-->
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<!-- 映射AxisServlet,使用通配符-->
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/axis/*</url-pattern>
</servlet-mapping>
</web-app>
配置文件中,看到所有匹配/axis/*模式的请求都由AxisServlet处理。即:Spring发布的WebService都在axis下。然后编写wsdl文件,或者使用工具生成。wsdl文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- wsdl的根元素,包含schema等信息-->
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- wsdl的全局配置-->
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="axis.sendMinimizedElements" value="true"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<!-- 定义WebService的管理台-->
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<!-- 定义自己的WebService-->
<service name="HelloService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<!-- 定义WebService的实现类-->
<parameter name="className" value="lee.HelloEndpoint"/>
</service>
<!-- 定义WebSerivice的系统服务。-->
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
经过这些步骤,可将部署在Spring的普通bean发布成WebService。
- WebServiceServletEndpointSupport
- C++学习笔记
- 关于ssh环境搭建的感悟
- QT编写Windows开机启动程序
- C++拷贝构造函数与赋值函数
- 【Windows7】Android SDK更新及ADT更新出现Failed to fetch URL 的解决办法
- WebServiceServletEndpointSupport
- 黑马程序员_学习笔记14_asp.net之Cookie原理解析
- 关于QPushButton的问题 hover press
- mysql视图学习总结
- ORA-12505解决办法
- ARM9---LED和按键
- Android apk 反编译
- 解决ajax用户名存在,仍可以提交的问题
- POJ-2965-The Pilots Brothers' refrigerator