我有一个使用Sun的MSV库的网络应用程序。 MSV的所有类都包含在Web应用程序WEB-INF/lib
的jar中。在JBoss 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应用程序jar加载的。)我看到我可以排除{{1中的一些模块如下,但我应该排除哪些?怎么找出来?
jboss-deployment-structure.xml
答案 0 :(得分:0)
HI我不了解您的实际配置,但这是因为您在xml配置文件中的模块配置。我也遇到了这种错误,但我通过提供模块解决了这个问题。所以你必须在你的服务器上安装你的库作为模块。
添加模块 i。在应用程序服务器的根目录下,是一个名为modules的目录。创建自己的模块 例如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>
依赖关系用于声明模块对其他模块的依赖性。