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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

<?xmlversion="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,这要求我们实现自己的继承自CXFNonSpringServlet的Servlet,然后重写其loadBus方法,最终需要达到的效果就是CXFNonSpringServlet使用的Bus与我们的发布Webservice时使用的Bus是同一个即可。这样当我们访问CXFNonSpringServlet请求某个Webservice时,CXFNonSpringServlet将自动根据请求的相对路径去寻找发布路径为其相对路径的Webservice。

下载地址java后台框架 springmvc mybaits 集代码生成器

publicclassWebserviceServletextendsCXFNonSpringServlet {

/**

*

*/

private static final longserialVersionUID= 3919868434043901738L;

@Override

protected voidloadBus(ServletConfig sc) {

super.loadBus(sc);

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

Bus bus =this.getBus();

JaxWsServerFactoryBean jsFactoryBean =newJaxWsServerFactoryBean();

jsFactoryBean.setBus(bus);

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

jsFactoryBean.setAddress("helloWorld");

jsFactoryBean.setServiceClass(HelloWorldService.class);

jsFactoryBean.setServiceBean(newHelloWorldServiceImpl());

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>

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航