SAAJMetaFactoryImpl не найден в Weblogic 10gR3 - PullRequest
0 голосов
/ 27 апреля 2010

Я в процессе миграции приложения веб-сервиса, которое отлично работало на Weblogic 9, на Weblogic 10gR3. Небольшая трудность заключается в том, что мое приложение использует JAX-WS, а в Weblogic 9 мне пришлось включить библиотеки JAX-WS в мою WAR. Но в WLS 10 эти библиотеки уже интегрированы. Чтобы избежать конфликтов, я помещаю свою WAR в EAR со следующим weblogic-application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
  <application-param>
    <param-name>webapp.encoding.default</param-name>
    <param-value>UTF-8</param-value>
  </application-param>
  <prefer-application-packages>
    <package-name>com.sun.xml.*</package-name>
    <package-name>javax.xml.bind.*</package-name>
    <package-name>javax.jws.*</package-name>
  </prefer-application-packages>
</weblogic-application>

Благодаря этому у меня больше нет ClassCastExceptions, но у меня есть еще одно исключение:

javax.xml.soap.SOAPException: Unable to create SAAJ meta-factoryProvider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found
at javax.xml.soap.SAAJMetaFactory.getInstance(SAAJMetaFactory.java:85)
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:148)
at com.sun.xml.ws.api.SOAPVersion.<init>(SOAPVersion.java:178)
at com.sun.xml.ws.api.SOAPVersion.<clinit>(SOAPVersion.java:83)
at com.sun.xml.ws.api.BindingID.<clinit>(BindingID.java:318)
at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:294)
at org.jvnet.jax_ws_commons.spring.SpringService.getObject(SpringService.java:45)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectFromFactoryBean(AbstractBeanFactory.java:1236)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1207)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:262)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:465)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:175)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1784)
at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2999)
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1371)

Что странно, так это то, что этот класс SAAJMetaFactoryImpl, который, как он говорит, не может найти, является частью JDK 1.6.0_17, который используется WLS10 в MACOSX 10.6, где он установлен.

Есть идеи, что может вызвать этот конфликт?

Ответы [ 2 ]

1 голос
/ 23 января 2014

Я не уверен, как это пойдет на пользу, но это сработало для моего варианта использования, который требовал настройки делегирования загрузки.

Каждый сервер приложений будет иметь файл настроек конфигурации (обычно <имя сервера приложений> .properties, например, weblogic.properties, sling.properties ....). Возможно, вам придется добавить следующую строку

" <имя сервера приложений> .bootdelegation.com.sun = com.sun. *"

Например

Для сервера weblogic: "weblogic.bootdelegation.com.sun = com.sun. *"
Для сервера Adobe CQ: "sling.bootdelegation.com.sun = com.sun. *"

И это будет работать для большинства проблем, связанных с этой проблемой потока.

Теперь перейдем к объяснению, com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl уже упакован с rt.jar , который является частью библиотеки времени выполнения JDK / JRE , Однако этот пакет полностью игнорируется при загрузке приложения. Когда специально указывается загрузить через конфигурацию приложения, загружается правильный класс реализации (что и делает .bootdelegation. ).

Надеюсь, это поможет.

0 голосов
/ 28 апреля 2010

Из документов , когда вы указываете prefer-application-packages для com.sun.xml.*, эти пакеты загружаются из приложения, а не из системного загрузчика классов.

...