首页 > Web开发 > 详细

Web环境使用相对路径发布Webservice

时间:2015-12-04 02:05:06      阅读:370      评论:0      收藏:0      [点我收藏+]

Web环境使用相对路径发布Webservice

?

???????? 通常我们的Webservice服务的发布地址都将是一个相对路径,在与Spring一起使用时我们需要引入Cxf配置Webserviceschema,如jaxws,用以定义对应的Webservice

?

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

????? xmlns:jaxws="http://cxf.apache.org/jaxws"

????? xsi:schemaLocation="

???????? http://www.springframework.org/schema/beans

???????? http://www.springframework.org/schema/beans/spring-beans.xsd

???????? http://cxf.apache.org/jaxws

???????? http://cxf.apache.org/schemas/jaxws.xsd">

?

?? <bean id="helloWorld" class="com.elim.test.cxf.service.HelloWorldServiceImpl"/>

?

?? <!-- ID可以加斜杠也可以不加 -->

?? <jaxws:server id="/helloWorld" serviceBean="#helloWorld" serviceClass="com.elim.test.cxf.service.HelloWorldService" />

?

</beans>

?

???????? 然后我们需要定义一个CXFServlet,用以接收对应的Webservice请求,如下所示。

?

<?xml version="1.0" encoding="UTF-8"?>

?

<web-app?

??????? version="3.0"?

??????? xmlns="http://java.sun.com/xml/ns/javaee"?

??????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?

??????? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

???????

?? <context-param>

????? <param-name>contextConfigLocation</param-name>

????? <param-value>classpath:webservices.xml</param-value>

?? </context-param>

??

?? <listener>

?? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

?? </listener>

??

?? <servlet>

????? <servlet-name>CxfServlet</servlet-name>

????? <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

?? </servlet>

??

?? <servlet-mapping>

????? <servlet-name>CxfServlet</servlet-name>

????? <url-pattern>/sys/service/*</url-pattern>

?? </servlet-mapping>

??

</web-app>

?

???????? 这样如果我们想访问HelloWorldService这个Webservice就可以通过相对于当前工程发布路径的/sys/service/helloWorld来访问了。

???????? 但是如果我们的工程没有使用Spring,但是我们也想把Webservice发布为工程的某一个路径的相对路径怎么办?Cxf也为我们提供了相应的支持,这比使用Spring时的CXFServlet要麻烦一点。Cxf为我们提供了一个CXFNonSpringServlet,这要求我们实现自己的继承自CXFNonSpringServletServlet,然后重写其loadBus方法,最终需要达到的效果就是CXFNonSpringServlet使用的Bus与我们的发布Webservice时使用的Bus是同一个即可。这样当我们访问CXFNonSpringServlet请求某个Webservice时,CXFNonSpringServlet将自动根据请求的相对路径去寻找发布路径为其相对路径的Webservice

?

publicclass WebserviceServlet extends CXFNonSpringServlet {

?

?? /**

?? ?*

?? ?*/

?? private?static?final?longserialVersionUID = 3919868434043901738L;

?

?? @Override

?? protected?void loadBus(ServletConfig sc) {

????? super.loadBus(sc);

????? //获取当前CXFNonSpringServlet使用的Bus,然后利用该Bus来发布服务

????? Bus bus = this.getBus();

????? JaxWsServerFactoryBean jsFactoryBean = new JaxWsServerFactoryBean();

????? jsFactoryBean.setBus(bus);

????? //该路径是相对于当前CXFNonSpringServlet匹配的路径的,也可以加斜杠

????? jsFactoryBean.setAddress("helloWorld");

????? jsFactoryBean.setServiceClass(HelloWorldService.class);

????? jsFactoryBean.setServiceBean(new HelloWorldServiceImpl());

????? jsFactoryBean.create();

?? }

??

}

?

?? 这时我们的web.xml需要定义我们自己的CXFNonSpringServlet,即:

?

<?xml version="1.0" encoding="UTF-8"?>

?

<web-app?

??????? version="3.0"?

??????? xmlns="http://java.sun.com/xml/ns/javaee"?

??????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?

??????? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

???????

?? <servlet>

????? <servlet-name>CxfServlet</servlet-name>

????? <servlet-class>com.elim.test.cxf.servlet.WebserviceServlet</servlet-class>

????? <load-on-startup>1</load-on-startup>

?? </servlet>

??

?? <servlet-mapping>

????? <servlet-name>CxfServlet</servlet-name>

????? <url-pattern>/sys/service/*</url-pattern>

?? </servlet-mapping>

??

</web-app>

?

参考文档

http://cxf.apache.org/docs/servlet-transport.html

?

(注:本文是基于Cxf2.7.6所写)

?

?

?

?

?

Web环境使用相对路径发布Webservice

原文:http://haohaoxuexi.iteye.com/blog/2261444

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!