Не удалось создать экземпляр javax.xml.parsers.DocumentBuilderFactory в Websphere Application Server с обновлением Hibernate 5.2.2. - PullRequest
0 голосов
/ 09 января 2019

Обновление Hibernate 4.2 до версии Hibernate 5.2

При развертывании приложения в версии Websphere 8.5.5.13 выдается следующее сообщение об ошибке

00000001 ContainerHelp E WSVR0501E: Ошибка при создании компонента com.ibm.ws.runtime.component.CompositionUnitMgrImpl@b9dc2b3a com.ibm.ws.exception.RuntimeWarning: com.ibm.ws.exception.RuntimeError: com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: javax.xml.parsers.FactoryConfigurationError: Provider Не удалось создать экземпляр javax.xml.parsers.DocumentBuilderFactory: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: поставщик org.apache.xerces.jaxp.DocumentBuilderFactoryImpl не является подтипом в com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCUList (CompositionUnitMgrImpl.java:1303) в com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start (CompositionUnitMgrImpl.java:275)

Я пытался удалить xml-api jar и исключение maven

         <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate-core.version}</version>
            <exclusions>
                <exclusion>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
                </exclusion>
            </exclusions>
        </dependency> 

Однако развертывание веб-приложения прошло успешно в Tomcat 9 без изменений.

Трассировка стека:

00000001 ContainerHelp E   WSVR0501E: Error creating component com.ibm.ws.runtime.component.CompositionUnitMgrImpl@b9dc2b3a
com.ibm.ws.exception.RuntimeWarning: com.ibm.ws.exception.RuntimeError: com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: javax.xml.parsers.FactoryConfigurationError: Provider javax.xml.parsers.DocumentBuilderFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not a subtype
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCUList(CompositionUnitMgrImpl.java:1303)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:275)
    at com.ibm.ws.runtime.component.ContainerHelper.startComponents(ContainerHelper.java:540)
    at com.ibm.ws.runtime.component.ContainerImpl.startComponents(ContainerImpl.java:627)
    at com.ibm.ws.runtime.component.ContainerImpl.start(ContainerImpl.java:618)
    at com.ibm.ws.runtime.component.ApplicationServerImpl.start(ApplicationServerImpl.java:252)
    at com.ibm.ws.runtime.component.ContainerHelper.startComponents(ContainerHelper.java:540)
    at com.ibm.ws.runtime.component.ContainerImpl.startComponents(ContainerImpl.java:627)
    at com.ibm.ws.runtime.component.ContainerImpl.start(ContainerImpl.java:618)
    at com.ibm.ws.runtime.component.ServerImpl.start(ServerImpl.java:540)
    at com.ibm.ws.runtime.WsServerImpl.bootServerContainer(WsServerImpl.java:316)
    at com.ibm.ws.runtime.WsServerImpl.start(WsServerImpl.java:229)
    at com.ibm.ws.runtime.WsServerImpl.main(WsServerImpl.java:702)
    at com.ibm.ws.runtime.WsServer.main(WsServer.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
    at java.lang.reflect.Method.invoke(Method.java:508)
    at com.ibm.wsspi.bootstrap.WSLauncher.launchMain(WSLauncher.java:234)
    at com.ibm.wsspi.bootstrap.WSLauncher.main(WSLauncher.java:96)
    at com.ibm.wsspi.bootstrap.WSLauncher.run(WSLauncher.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
    at java.lang.reflect.Method.invoke(Method.java:508)
    at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
    at java.lang.reflect.Method.invoke(Method.java:508)
    at org.eclipse.core.launcher.Main.invokeFramework(Main.java:340)
    at org.eclipse.core.launcher.Main.basicRun(Main.java:282)
    at org.eclipse.core.launcher.Main.run(Main.java:981)
    at com.ibm.wsspi.bootstrap.WSPreLauncher.launchEclipse(WSPreLauncher.java:407)
    at com.ibm.wsspi.bootstrap.WSPreLauncher.main(WSPreLauncher.java:170)
Caused by: com.ibm.ws.exception.RuntimeError: com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: javax.xml.parsers.FactoryConfigurationError: Provider javax.xml.parsers.DocumentBuilderFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not a subtype
    at com.ibm.wsspi.runtime.component.WsComponentImpl.join(WsComponentImpl.java:436)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCUList(CompositionUnitMgrImpl.java:1295)
    ... 39 more
Caused by: com.ibm.ws.exception.RuntimeError: java.lang.RuntimeException: javax.xml.parsers.FactoryConfigurationError: Provider javax.xml.parsers.DocumentBuilderFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not a subtype
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:818)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl$5.run(ApplicationMgrImpl.java:2279)
    at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5554)
    at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5680)
    at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2284)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:436)
    at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:379)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:127)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:985)
    at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:524)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)
Caused by: java.lang.RuntimeException: javax.xml.parsers.FactoryConfigurationError: Provider javax.xml.parsers.DocumentBuilderFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not a subtype
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:1063)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:795)
    ... 12 more
Caused by: javax.xml.parsers.FactoryConfigurationError: Provider javax.xml.parsers.DocumentBuilderFactory could not be instantiated: java.util.ServiceConfigurationError: javax.xml.parsers.DocumentBuilderFactory: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not a subtype
    at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
    at com.ibm.ws.webservices.engine.utils.XMLUtils.getDocumentBuilderFactory(XMLUtils.java:460)
    at com.ibm.ws.webservices.engine.utils.XMLUtils.newDocument(XMLUtils.java:539)
    at com.ibm.ws.webservices.engine.utils.XMLUtils.newDocument(XMLUtils.java:557)
    at com.ibm.ws.webservices.engine.encoding.custom.Utils.loadCustomProviders(Utils.java:267)
    at com.ibm.ws.webservices.tools.resource.ToolEnv$3.run(ToolEnv.java:332)
    at java.security.AccessController.doPrivileged(AccessController.java:638)
    at com.ibm.ws.webservices.tools.resource.ToolEnv.loadCustomProviders(ToolEnv.java:329)
    at com.ibm.ws.webservices.tools.resource.ToolEnv.getCustomBindingProviders(ToolEnv.java:324)
    at com.ibm.ws.webservices.wsdl.toJava.Emitter.initCustomBindingRegistry(Emitter.java:972)
    at com.ibm.ws.webservices.wsdl.toJava.Emitter.setup(Emitter.java:959)
    at com.ibm.ws.webservices.wsdl.Parser.parse(Parser.java:326)
    at com.ibm.ws.webservices.wsdl.Parser.run(Parser.java:313)
    at com.ibm.ws.webservices.tools.WSDLQuery.parse(WSDLQuery.java:142)
    at com.ibm.ws.webservices.engine.deployment.wsdd.WSDDGen.getWSDLQuery(WSDDGen.java:214)
    at com.ibm.ws.webservices.engine.deployment.wsdd.WSDDPort.expand(WSDDPort.java:554)
    at com.ibm.ws.webservices.engine.deployment.wsdd.WSDDPort._initTMR(WSDDPort.java:311)
    at com.ibm.ws.webservices.component.WSServerImpl.setupWsddPort(WSServerImpl.java:1264)
    at com.ibm.ws.webservices.component.WSServerImpl.warMetaDataCreated(WSServerImpl.java:2151)
    at com.ibm.ws.webservices.component.WSServerImpl.metaDataCreated(WSServerImpl.java:639)
    at com.ibm.ws.runtime.component.MetaDataMgrImpl.fireMetaDataCreated(MetaDataMgrImpl.java:279)
    at com.ibm.ws.runtime.component.MetaDataMgrImpl.fireMetaDataCreated(MetaDataMgrImpl.java:262)
    at com.ibm.ws.webcontainer.metadata.WebMetaDataFactory.createMetaData(WebMetaDataFactory.java:244)
    at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaDataFromFactories(MetaDataMgrImpl.java:228)
    at com.ibm.ws.runtime.component.MetaDataMgrImpl.createMetaData(MetaDataMgrImpl.java:411)
    at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:631)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:979)

1 Ответ

0 голосов
/ 10 января 2019

Похоже, что существует перекрестная связь между загрузчиком уровня сервера и загрузчиком класса приложения «последний родитель». Загрузчик уровня сервера (фактически, более вероятно, уровня Java) загружает класс API DocumentBuilderFactory, который затем идет в загрузчик класса контекста потока, чтобы найти его реализацию. Загрузчик класса контекста потока является последним загрузчиком приложения родителя, который не сразу делегирует своим родителям, поэтому он находит реализацию там, и это, в свою очередь, ссылается на копию приложения класса API. Исходный класс API (из Java) и «новый» класс API (из приложения) не могут быть преобразованы друг в друга, поскольку они получены из разных загрузчиков классов, и операция завершается ошибкой.

С точки зрения фактического решения этого:

1) С вероятностью 99,9% вам не нужно приносить собственную версию JAXP, которая уже очень давно включена в JDK (и, похоже, вы упаковываете Xerces, версию, включенную в IBM Java). Удаление этого исключит это исключение. Аналогичным образом, вы можете решить эту проблему, переключившись на делегирование загрузчика классов «сначала родитель» - если вам НЕ НУЖНО переопределять API-интерфейсы сервера своим, это значительно снижает риск возникновения подобных проблем.

2) Тем не менее ... вам не обязательно иметь его, так как сервер обычно позволяет приложениям создавать свои собственные парсеры. Этот стек исключений подразумевает, что некоторый код WebSphere может неправильно защищать контекст своего потока при создании объекта XML, и вы можете открыть заявку в службу поддержки и попросить IBM проверить, есть ли здесь настоящая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...