java - CXF 和多个 servlet 映射

标签 java spring jax-ws cxf jax-rs

目前我们有一个带有 Spring MVC DispatcherServlet 和两个 CXFServlet 的 Java webapp。 DispatcherServlet 是默认的servlet(映射/),一个CXFServlet 映射到/api/*,另一个映射到/services/*

困扰我的是,似乎不可能有 1 个 CXFServlet 托管 2 个服务,一个在 /api/v0 上,一个在 /services/myService 上,没有将 /* 映射到 CXFServlet。如果这是可能的,它将节省另一个 servlet 实例的初始化时间、配置麻烦和内存需求。

所以基本上,我的问题是,是否有人知道一种方法可以在 1 个 CXFServlet 中的 2 个 URL 上托管 2 个 CXF 服务,没有通用的基本/根 URL,最好使用 Spring 命名空间配置,无需映射 /* 到 CXFServlet?

最佳答案

invoke CXF ServletController 的方法第一个电话 HttpServletRequest#getPathInfo ,它返回请求的 URL 的一部分没有servlet 的url-pattern .此调用的结果随后用于通过调用 DestinationRegistry#getDestinationForPath 来匹配任何已定义的服务。 .因此,目前不可能使用包含 servlet 部分的路径让 CXF 匹配服务 — CXF 从不调用 HttpServletRequest#getServletPath这是需要的。

请注意 base-address可以在 servlet 的初始化参数 (<init-param>) 中设置的值只会影响 CXF 显示 的任何 URL,因为 ServletController#getBaseURL在服务调用期间不使用使用此值的方法。

关于java - CXF 和多个 servlet 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205947/

相关文章:

java - Spring MVC - 使用 java 执行 Oracle 存储过程?

java - 使用 Jackson 将 MongoDB 日期字段反序列化为 Java POJO

java - JDK交叉编译使用哪个版本的JAX WS和JAXB?

java - 更改 Android 选项菜单的外观

java - 当我尝试获取 Int 时我的应用程序停止

java.lang.IllegalArgumentException : Cannot bind argument at index 0 because the index is out of range. 该语句有4个参数

java - JAXWS SOAP 处理机大型 MTOM 附件

java - 无法访问返回语句?

spring - 如何在 View 中显示所有 Controller 和映射

soap - Java Document Literal WebService - MonoTouch 客户端在 WS 响应期间出现异常