2011-02-24 53 views
0

我正在使用OC4J 10.1.3.5.0,並且遇到WAR/EAR中提供的Spring XML文件中的XML名稱空間問題。OC4J 10.1.3.5/Spring3問題

根據Oracle文檔,在解析OC4J中的Spring 3 XSD文件時存在一個已知問題,因爲它嵌入了Oracle XMLParserV2 jar並將其用於所有XML解析(它在Spring中使用了一些XSD技巧3顯然)。

我已經聽取了Oracle解決方法,在OC4J實例上定義了我自己的XML解析器共享庫,以及(在orion-application.xml中)定義了要使用的共享庫。我用xercesImpl(v 2.9.1),xml-apis(v 1.3.04)和xml-resolver(v 1.2)創建了一個共享庫'apache.xml'。我試着定義EAR以使用新的庫

<imported-shared-libraries> 
    <imported-shared-library name="apache.xml"/> 
</imported-shared-libraries> 

我收到以下錯誤

14:50:31 ERROR (UserId:) [DispatcherServlet] Context initialization failed 
    org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 
     Line 10 in XML document from ServletContext resource [/WEB-INF/spring/webflow-config.xml] is invalid; 
    nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: 
    The matching wildcard is strict, but no declaration can be found for element 'webflow:flow-executor'. 

的一個Webflow-config.xml文件中被定義爲正常:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:webflow="http://www.springframework.org/schema/webflow-config" 
     xsi:schemaLocation=" 
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
       http://www.springframework.org/schema/webflow-config 
       http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd"> 

    <!-- Executes web flows --> 
    <webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry" /> 

    <!-- Rest of the file ... --> 

</beans> 

有誰有什麼想法?

[編輯] 的片段:

<imported-shared-libraries> 
    <imported-shared-library name="apache.xml"/> 
</imported-shared-libraries> 

當然應該閱讀:

<imported-shared-libraries> 
    <import-shared-library name="apache.xml"/> 
</imported-shared-libraries> 

對不起!

+0

您是否將spring-webflow jar添加到項目的類路徑中? – Javi 2011-02-24 21:59:18

+0

是的。在這個階段,我有大部分的Spring JAR文件在WAR的類路徑中。因此,JAR會嵌入到WAR中,而WAR本身也嵌入到EAR中。 (對不起,延遲迴答,我不太好)。 – GKelly 2011-03-07 08:13:13

回答

0

我找到了答案。原來,這是因爲我在Java 6 JVM上運行OC4J。如果其他人得到這個問題,我們做了以下解決:

Oracle XML解析器不能很好地處理Spring 3 XSD文件,這是一個已知問題。您需要爲應用程序刪除Oracle XSD庫。在你orion-application.xml文件,你需要

<imported-shared-libraries> 
    <remove-inherited name="oracle.xml"/> 
</imported-shared-libraries> 

Oracle文檔然後告訴你導入共享庫。但是,如果您在Java 6 JVM(我們就是!)上運行OC4J,則無法執行此操作。看起來現在Java 6內核中有一個XML解析器,導入Xerces庫會與這些類發生衝突,從而導致奇怪的錯誤。

無論如何,在Java 6上,刪除Oracle庫,但不要導入任何其他的!