SAAJMetaFactoryImpl nicht gefunden auf Weblogic 10gR3
Ich bin in den Prozess der Migration einer webservice-Anwendung, die perfekt funktioniert auf Weblogic 9 in Weblogic 10gR3.
Die kleine Schwierigkeit ist, dass meine Anwendung verwendet JAX-WS und auf Weblogic 9 ich hatte zu zählen JAX-WS Bibliotheken in meinem KRIEG. Aber auf WLS 10, die Bibliotheken bereits integriert sind.
Um Konflikte zu vermeiden, legte ich meine KRIEG im inneren des OHRES mit den folgenden 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>
Dank, dass ich nicht ClassCastExceptions nicht mehr, aber ich habe noch eine Ausnahme:
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)
Was ist komisch ist, dass diese SAAJMetaFactoryImpl Klasse es sagt, dass es nicht finden können, ist Teil des JDK 1.6.0_17, die von WLS10 auf MACOSX 10.6 dem es installiert wird.
Jede Idee, was könnte die Ursache dieses Konflikts?
- Wenn Sie wollen, dass Sie geladen aus dem Krieg sollte es werden prefer-web-inf-classes auf true gesetzt?
- Ich denke, dieser Teil funktioniert auch schon. Plus, ist nicht prefer-web-inf-classes überschrieben weblogic-Klassen mit Klassen aus WEB-INF/classes? Weil hier das, was ich will zu tun ist, überschreiben Klassen von Weblogic Klassen in WEB-INF/lib/*.jar
- Es funktioniert für beide - Ihre lib/*.jar geladen wird bevorzugt Weblogic eigene version.
- Sowieso. Wieder einmal, so scheint es, dass dieser Teil funktioniert. Die Frage ist, warum ist es nicht in der Lage zu finden, eine Klasse, gehört zu den JDK läuft es auf?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht sicher, wie Sie davon profitieren, aber es funktionierte für meinen Anwendungsfall die erforderlichen boot-delegation Einstellungen.
Jeder application server eine Konfigurationsdatei (in der Regel <application-server-name>.Eigenschaften z.B. "weblogic".Eigenschaften, sling.Eigenschaften....). Sie müssen möglicherweise die folgende Zeile hinzufügen
"<application-server-name>.bootdelegation.com.Sonne=com.Sonne.*"
Beispielsweise
Und dies funktioniert für die meisten das problem im Zusammenhang mit diesem thread-Thema.
Kommen wir nun zu der Erklärung, com.Sonne.xml.intern.messaging.saaj.Seife.SAAJMetaFactoryImpl ist schon verpackt mit rt.jar, die ein Teil jeder Laufzeit-Bibliothek des JDK/JRE. Aber dieses Paket ist völlig ignoriert werden, während des Starts der Anwendung. Wenn speziell angewiesen, die Belastung durch Anwendungs-Konfiguration, die die korrekte Umsetzung Klasse geladen wird (das ist, was .bootdelegation. es tut).
Ich hoffe, das hilft.
Aus der docs, wenn Sie angeben, dass
prefer-application-packages
fürcom.sun.xml.*
, diese Paket geladen werden, von der Anwendung, nicht auf den system-classloader.