2017-10-08 157 views
0

我正在使用Apache CXF框架來實現Rest WebService.I使用Spring 4.3.10版本。 問題我面臨的是我不能夠使用<jaxrs:server>元素。我認爲這是在春季升級版的一些變化:以前它被配置類似下面的代碼片段:使用Spring的Apache CXF Rest服務

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

當我使用<jaxrs>標籤我得到以下異常:

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"> 

因此,從上面的代碼片段可以看出,我已經包含了jaxrs命名空間,儘管它給出了上述錯誤。 但現在我發現了一個新標籤:<jaxrs:model>[我在彈簧bean配置文件裏使用Cntrl + Space選項在日食 中得到了這個選項]

我想知道它的用法。 任何人都可以提供任何合適的例子嗎?

+0

代碼片段看起來不錯,應該與Spring版本一起工作。你會得到什麼樣的錯誤信息?你在哪裏注意到jaxrs:model? –

+0

@Dennis在主要帖子中回覆了您的評論。另外,我認爲Spring 4.3.10中有一些語法上的變化,它們沒有那個jaxrs標籤。 –

+0

那麼jaxrs命名空間不是Spring的一部分,而是CXF的一部分。所以改變Spring版本並不重要。 –

回答

0

幾年前我面臨同樣的問題(現在我不再使用基於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"> 

您可以檢查這兩個XSD在cxf-rt-frontend-jaxrs.jarschemas目錄。

+0

感謝Karthik.It的工作。 –