我在向OC4J部署一個簡單的WebServices應用程序(如「Hello World」簡單)時出現問題。在Jetty下相同的代碼工作正常,但在OC4J中打破,我想知道是否有其他人面臨同樣的問題。我使用Enterprise Manager來部署應用程序,但部署失敗此消息:Java WebServices with Spring和OAS/OC4J
[Jan 23, 2009 8:46:20 AM] Binding TestWs web-module for application TestWs to site default-web-site under context root /TestWs
[Jan 23, 2009 8:46:22 AM] Operation failed with error: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]
Offending resource: ServletContext resource [/WEB-INF/beans.xml]
望着beans.xml中,有問題的代碼似乎是XML命名空間聲明:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint
id="helloService"
implementor="com.test.endpoint.HelloImpl"
address="/HelloWorld" />
</beans>
堆棧跟蹤不可怕照明:
09/01/23 08:57:28 oracle.oc4j.admin.internal.DeployerException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]
Offending resource: ServletContext resource [/WEB-INF/beans.xml]
09/01/23 08:57:28 at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
09/01/23 08:57:28 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
09/01/23 08:57:28 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
09/01/23 08:57:28 at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:261)
09/01/23 08:57:28 at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1120)
...
有沒有其他人遇到類似的問題?如果是這樣,那麼解決它的最好方法是什麼?我的XML技能是中等的,而且我是WebServices的完全noob。但這可能是一個OC4J問題。
在此先感謝您的幫助!如果OC4J對於它想要查看的jar的位置(我知道Tomcat可以)是奇怪的,那麼就不會有這樣的問題了。就我所知,這不是一個類路徑問題。我的WEB-INF/lib文件夾包含CXF jar,Spring jars(beans,context,core和web),xml-resolver-1.2.jar和XmlSchema-1.4.2.jar。如果我需要列出WEB-INF/lib文件夾中的所有內容,我會。但是,該程序再次在Jetty中運行。
另一個編輯:基於什麼我讀here,這似乎是春和CXF罐子之間的問題 - 有在CXF罐子NamespaceHandler類(在org.apache.cxf.frontend.spring
要準確),但有似乎是防止Spring看到它的配置問題。
最後編輯:謝謝大家的幫助。我從未結束CXF在OC4J上的工作,因爲我的客戶端版本是10.1.3.3.0。這不符合J2EE 5標準,我敢肯定,他們不會去解開oc4j.jar來改變boot.xml。但是,如果沒有丹尼爾指出的文件,我永遠不會知道這一點。
因此,我切換到XFire版本1.2.6,並得到我的測試應用程序後,幾個打嗝。一路上我瞭解到OC4J的一些有趣的事情:
- 當在企業管理器部署,確保你選擇先加載本地類路徑。
- OC4J使用非標準XML文件,因此請確保您的應用程序未使用任何OC4J的本機XML文件(在部署設置中,取消選中當前選定的所有導入 - 這樣,您可以確保該應用程序正在使用只有您在WEB-INF/lib中提供的文件)
- 如果可以,請使用其他應用程序服務器。 :P
再次謝謝大家!
這實際上是我的第一個想法,但WEB-INF/lib具有應用程序所需的所有庫,包括cxf jar。 – rtperson 2009-01-23 14:18:12
至於你的第二個問題,OC4J在它的部署方式上有點奇怪。除非你將它打包成自己的EAR,否則它不會需要WAR。據我所知,這個想法是爲EAR的META-INF保存應用程序XML文件,然後OC4J用它來部署應用程序。 – rtperson 2009-01-23 14:38:43