2011-10-20 24 views
0

我有一個網絡應用程序,它使用Sun的MSV庫。 MSV的所有課程都包含在網絡應用程序WEB-INF/lib中的罐子中。當JBoss上部署7這個程序,我得到以下異常:如何在JBoss AS 7中調試錯誤的模塊依賴關係?

java.lang.NoClassDefFoundError: Could not initialize class com.sun.msv.datatype.xsd.AnyURIType 
     at com.sun.msv.datatype.xsd.DatatypeFactory.getTypeByName(DatatypeFactory.java:195) 
     at com.sun.msv.datatype.xsd.ngimpl.DataTypeLibraryImpl.getType(DataTypeLibraryImpl.java:32) 
     at com.sun.msv.datatype.xsd.ngimpl.DataTypeLibraryImpl.createDatatypeBuilder(DataTypeLibraryImpl.java:36) 
     at com.sun.msv.reader.trex.ng.DataState.startSelf(DataState.java:58) 
     at com.sun.msv.reader.State.init(State.java:153) 
     at com.sun.msv.reader.GrammarReader.pushState(GrammarReader.java:576) 
     at com.sun.msv.reader.SimpleState.startElement(SimpleState.java:71) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at com.sun.msv.reader.trex.TREXBaseReader.startElement(TREXBaseReader.java:184) 
     at com.sun.msv.reader.trex.ng.RELAXNGReader.startElement(RELAXNGReader.java:524) 
     at com.sun.msv.reader.trex.ng.comp.RELAXNGCompReader.startElement(RELAXNGCompReader.java:197) 
     at orbeon.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:497) 
     at orbeon.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:180) 
     at orbeon.apache.xerces.xinclude.XIncludeHandler.emptyElement(XIncludeHandler.java:1024) 
     at orbeon.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:275) 
     at orbeon.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1654) 
     at orbeon.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324) 
     at orbeon.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:845) 
     at orbeon.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:768) 
     at orbeon.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108) 
     at orbeon.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1201) 
     at com.sun.msv.reader.util.GrammarLoader._loadSchema(GrammarLoader.java:514) 
     at com.sun.msv.reader.util.GrammarLoader.parse(GrammarLoader.java:325) 
     at com.sun.msv.reader.util.GrammarLoader.loadSchema(GrammarLoader.java:189) 
     at com.sun.msv.verifier.jarv.TheFactoryImpl.parse(TheFactoryImpl.java:42) 
     at com.sun.msv.verifier.jarv.FactoryImpl.compileSchema(FactoryImpl.java:98) 

它抱怨找不到類com.sun.msv.datatype.xsd.AnyURIType,但類是存在於罐子之一。我假設堆棧跟蹤中的某些類是從一個來自JBoss的模塊「錯誤地」拾取的,因此從另一個類加載器加載,而不是從Web應用程序的WEB-INF/lib中的jar中加載。但哪一個可以呢? (您看到的orbeon.apache.xerces有一個Apache Xerces的重新版本,因此我們可以確定它已從Web應用程序罐中加載。)我已經看到,我可以排除jboss-deployment-structure.xml中的某些模塊,如下所示,但是我應該排除嗎?如何找出答案?

<jboss-deployment-structure> 
    <ear-subdeployments-isolated>true</ear-subdeployments-isolated> 
    <deployment> 
     <exclusions> 
      <module name="com.sun.xml.bind"/> 
      <module name="org.codehaus.woodstox"/> 
      <module name="org.codehaus.jackson.jackson-xc"/> 
     </exclusions> 
    </deployment> 
</jboss-deployment-structure> 
+0

因爲AS7是全新的,所以您可能能夠在jboss社區[論壇](http://community.jboss.org/)中獲得幫助。許多JBoss核心開發人員在社區網站上非常活躍。 – CoolBeans

+0

感謝您的建議。我在http://community.jboss.org/thread/173836上發佈了這個問題,如果我通過JBoss論壇找到了這個問題的解決方案,將會在這裏跟進 – avernet

回答

0

HI我不理解你的實際配置,但是這是因爲在xml配置文件的模塊配置的。我也有這種錯誤,但我解決了它提供的模塊到服務器。所以你必須安裝你的庫作爲一個模塊在你的服務器。

添加模塊 i.Under應用服務器的根目錄下,是一個稱爲模塊的目錄。創建您自己的模塊 jboss-7.0.0./modules/com/mysql/main ii。現在您需要使用module.xml文件以及創建的文件夾中包含數據庫驅動程序的實際jar文件來定義模塊。

Modules 
    +---com 
    ¦ +---codehaus 
    ¦ ¦ +---main 
    ¦ ¦ +-------module.xml 
    ¦ ¦ +------<your jar file> 

module.xml的內容應該如下:

<?xml version="1.0" encoding="UTF-8"?> 
<module xmlns="urn:jboss:module:1.0" name="<*module name*>"> 
<resources> 
<resource-root path="<*jar name*>"/> 
<!-- Insert resources here --> 
</resources> 
<dependencies> 
<module name="javax.api"/> 
<module name="javax.transaction.api"/> 
</dependencies> 
</module> 

依賴用於其他模塊上宣佈你的模塊依賴關係。