Как отладить некорректную зависимость модуля в JBoss AS 7? - PullRequest
0 голосов
/ 20 октября 2011

У меня есть веб-приложение, которое использует библиотеку 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>

1 Ответ

0 голосов
/ 25 октября 2011

HI Я не понимаю вашу фактическую конфигурацию, но это из-за конфигурации вашего модуля в файле конфигурации xml.Я также получил этот вид ошибки, но я решил ее, предоставив модуль на сервер. Поэтому вы должны установить свою библиотеку как модуль на вашем сервере.

Добавить модуль i. ПодКорневой каталог сервера приложений, это каталог, называемый модулями.Создайте свой собственный модуль Например, 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>

Зависимости используются для объявления зависимостей вашего модуля от другого модуля.

...