У меня есть веб-приложение, которое использует библиотеку Sun MSV.Все классы для MSV включены в jar в веб-приложении WEB-INF/lib
.При развертывании этого приложения на 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
, но этот класс присутствует в одном из jar.Я предполагаю, что некоторые из этих классов в трассировке стека были «неправильно» выбраны из модуля, который поставляется из JBoss, таким образом загружен из другого загрузчика классов, а не из jar в WEB-INF/lib
веб-приложения.Но какой это может быть?(Вы видите, что orbeon.apache.xerces
- это версия Apache Xerces с корнем, поэтому мы можем быть уверены, что она была загружена из jar-файлов веб-приложения.) Я видел, что могу исключить некоторые модули в 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>