我正在尝试使用 CXF 2.6.0 和 spring 2.5.6 开发 REST Web 服务,我在 pom 中的 CXF maven 依赖项.xml是:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-search</artifactId>
<version>2.6.0</version>
</dependency>
我正在使用 Spring 2.5.6,并且我已经在应用程序上下文中声明了我的 Web 服务.xml Spring 文件:
<jaxrs:server id="restContainer" address="/sav">
<jaxrs:serviceBeans>
<ref bean="wssav"/>
</jaxrs:serviceBeans>
</jaxrs:server>
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
并且我已经通过以下代码将我的 Web 服务声明为 web.xml 文件:
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
当我在 Tomcat 上部署我的项目时,我在应用程序上下文中导入的第二个文件.xml文件收到此异常:
java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-extension-jaxrs-binding.xml] cannot be opened because it does not exist
据此,cxf> 2.4.x 不再需要此文件。
我也遇到了完全相同的错误。我得到的错误是——
IOException parsing XML document from class path resource [META-INF/cxf/cxf-extension-jaxrs-binding.xml];
nested exception is java.io.FileNotFoundException:
class path resource [META-INF/cxf/cxf-extension-jaxrs-binding.xml] cannot be opened because it does not exist.
甚至我读到较新版本的cxf不需要cxf-rt-frontend-jaxrs以外的任何东西。收到这些错误后,我在我的pom文件中添加了以下依赖项,但它们没有帮助-
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-search</artifactId>
<version>2.6.2</version>
</dependency>
我也不明白为什么几乎所有详细介绍使用 CXF 构建 REST 服务的步骤的教程都希望您在 spring 配置中包含以下 3 行(当我无法在任何地方找到这些文件时)-
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
尝试删除导入 cxf-extension-jaxrs-binding.xml 的行。其他 2 个 xml 文件位于 cxf-X.Y.Z.jar 中。对我来说,这是cxf-2.7.7.jar。
文件 META-INF/cxf/cxf-extension-jaxrs-binding.xml 在下面的工件中可用。
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>2.2.7</version>
在应用程序上下文.xml中,注释掉以下导入在 cxf 3.1.10 中对我有用。import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml