[英]Combined JAX-RS and JAX-WS
是否存在将JAX-RS和JAX-WS(或等效功能)组合到一个组合服务中的框架,库或技术,类似于在WCF中为同一服务使用两个端点(一个SOAP和一个REST)?
Apache CXF can do the job. Apache CXF可以完成这项工作。 Read more at http://cxf.apache.org/docs/frontends.html 更多信息,请访问http://cxf.apache.org/docs/frontends.html
It's possible with a standard tomcat configuration. 使用标准的tomcat配置是可能的。 Just use separate URLs for the services. 只需为服务使用单独的URL即可。 I decided to put the JAX-WS service behind "SOAP/" and the others behind lowercase letters. 我决定将JAX-WS服务放在“SOAP /”后面,将其他服务放在小写字母后面。 If you want to use "rest" in the URL, it's even more easy, but not looking that nice for end users. 如果你想在URL中使用“rest”,它会更容易,但对最终用户来说并不好看。 Don't forget to add a sun-jaxws.xml, too. 别忘了添加sun-jaxws.xml。 I left the `init-params as they are useful for normalized URLs. 我留下了`init-params,因为它们对规范化的URL很有用。 You can drop all of them if you wish. 如果您愿意,可以放弃所有这些。
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="webapp"
version="2.5">
<display-name>displayname</display-name>
<filter>
<filter-name>rest</filter-name>
<filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>thepackage</param-value>
</init-param>
<init-param>
<!-- enables processing by JSPs if not JAX-RS handler is registered -->
<param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.CanonicalizeURIPath</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.NormalizeURI</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.Redirect</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>rest</filter-name>
<url-pattern>/firstresource/</url-pattern>
<url-pattern>/secondresource/</url-pattern>
</filter-mapping>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>soap</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>soap</servlet-name>
<url-pattern>/SOAP</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
Addon to Mikhail's answer, example of CXF's configuration. 添加到Mikhail的答案,CXF的配置示例。 More info is at http://cxf.apache.org/docs/jax-rs-and-jax-ws.html#JAX-RSandJAX-WS-JAXRSandJAXWS 更多信息请访问http://cxf.apache.org/docs/jax-rs-and-jax-ws.html#JAX-RSandJAX-WS-JAXRSandJAXWS
<!-- JAX-RS -->
<jaxrs:server id="customerService" address="/">
<jaxrs:serviceBeans>
<ref bean="customerService" />
</jaxrs:serviceBeans>
</jaxrs:server>
<!-- JAX-WS -->
<jaxws:endpoint implementor="#customerService"
address="/CustomerWorld" wsdlLocation="..."/>
<bean id="customerService" class="demo.jaxrs.server.CustomerService" />
Update: Peter Szanto created a maven project at https://github.com/ExampleDriven/cxf-example 更新:Peter Szanto在https://github.com/ExampleDriven/cxf-example创建了一个maven项目
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.