【问题标题】:Apache CXF Rest Services using Spring使用 Spring 的 Apache CXF 休息服务
【发布时间】:2017-10-08 14:39:22
【问题描述】:

我正在使用 Apache CXF 框架来实现 Rest WebService。我正在使用 Spring 4.3.10 版本。我面临的问题是我无法使用 <jaxrs:server> element。我认为 Spring 升级版本有一些变化:之前它的配置类似于下面的代码 sn-p:

<jaxrs:server id="userManagerREST" address="/rest/UserManager">
    <jaxrs:serviceBeans>
        <ref bean="userManagerService"/>
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean='jsonProvider' />
    </jaxrs:providers>
</jaxrs:server>

当我使用&lt;jaxrs&gt; 标签时,我遇到了以下异常:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 29 in XML document from ServletContext resource [/WEB-INF/spring/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 29; columnNumber: 67; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'jaxrs:server'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:614)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:515)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

请在 Spring 配置文件中找到我的命名空间声明:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs-common.xsd">

所以,从上面的代码 sn-p 可以看出,我已经包含了 jaxrs 命名空间,尽管它给出了上述错误。 但是现在我发现了一个新标签:&lt;jaxrs:model&gt;.[我在 eclipse 中得到了这个选项 在 spring bean 配置文件中使用 Cntrl+Space 选项].

我想知道它的用法。 任何人都可以为此提供任何合适的例子吗?

【问题讨论】:

  • 代码 sn-p 看起来不错,应该适用于 Spring 版本。您收到什么错误消息,您在哪里注意到 jaxrs:model?
  • @Dennis 已在主帖中回复了您的评论。此外,我认为 Spring 4.3.10 中的一些语法更改不再具有该 jaxrs 标签。
  • 那么 jaxrs 命名空间不是 Spring 的一部分,而是 CXF 的一部分。所以改变 Spring 版本应该没关系。

标签: spring rest cxf


【解决方案1】:

几年前我也遇到过同样的问题(现在我不再使用基于 xml 的配置),我不记得它的 eclipse 自动选择问题或文件被移动了。无论如何,问题是您的架构位置,将其从jaxrs-common.xsd 更改为jaxrs.xsd

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:jaxrs="http://cxf.apache.org/jaxrs"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">

您可以查看cxf-rt-frontend-jaxrs.jar schemas 目录中的两个xsd。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2013-10-02
    相关资源
    最近更新 更多