2009-01-23 22 views
0

我在向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

再次謝謝大家!

回答

1

我會認爲它是一個CLASSPATH問題。

我對OC4J並不熟悉,但是如何打包/部署您的Web應用程序?

您需要確保CXF jar位於WAR的WEB-INF/lib目錄中?

更新:您的評論有點困惑 - 如果您的彈簧配置位於EAR的META-INF目錄中,那麼這與您的網絡應用使用的類路徑不同。所以,事實上,堅持在WEB-INF/lib CXF罐是行不通的。您需要將JAR保存在EAR的頂層,或者在OC4J的所有類加載器中共享的lib中。我建議研究OC4J的企業應用程序/ web應用程序類加載器層次結構文檔,以查看這是否可以提供更多建議?

+0

這實際上是我的第一個想法,但WEB-INF/lib具有應用程序所需的所有庫,包括cxf jar。 – rtperson 2009-01-23 14:18:12

+0

至於你的第二個問題,OC4J在它的部署方式上有點奇怪。除非你將它打包成自己的EAR,否則它不會需要WAR。據我所知,這個想法是爲EAR的META-INF保存應用程序XML文件,然後OC4J用它來部署應用程序。 – rtperson 2009-01-23 14:38:43

1

看起來像一個配置問題春天:

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws] 
Offending resource: ServletContext resource [/WEB-INF/beans.xml] 

你有沒有在你的web.xml什麼讀到,當應用程序啓動?你是否看到在代碼中的任何位置爲該命名空間聲明的NamespaceHandler?

+0

Duffy,感謝您的回答,但我對於「那個」是指什麼有點困惑。假設「那個」是Spring的NamespaceHandler,我將在web.xml中設置什麼來讀取它? – rtperson 2009-01-23 15:26:52