2010-04-27 1 views
0

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

<?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, где он установлен.

Любая идея, что может вызвать этот конфликт?

+0

Если вы хотите, чтобы они были загружены с войны, разве это не было предположение, что для web-inf-classes установлено значение true? – JoseK

+0

Я думаю, что эта часть работает уже. Кроме того, не предпочитают-web-inf-классы, используемые для переопределения классов weblogic с классами из WEB-INF/classes? Потому что здесь я хочу переопределить классы из Weblogic с классами из WEB-INF/lib/*. Jar – Sebastien

+0

Он работает для обоих - ваш lib/*. Jar будет загружен в предпочтении собственной версии Weblogic. – JoseK

ответ

0

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

1

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

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

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

Например

Для WebLogic Server      : "weblogic.bootdelegation.com.sun = com.sun. *"
Для Adobe CQ Server: "sling.bootdelegation.com.sun = com.sun. *"

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

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

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

Смежные вопросы