【问题标题】:SAAJMetaFactoryImpl not found on Weblogic 10gR3在 Weblogic 10gR3 上找不到 SAAJMetaFactoryImpl
【发布时间】:2010-04-27 10:57:03
【问题描述】:

我正在将在 Weblogic 9 上完美运行的 Web 服务应用程序迁移到 Weblogic 10gR3 中。 小困难是我的应用程序使用 JAX-WS,而在 Weblogic 9 上,我必须在我的 WAR 中包含 JAX-WS 库。但在 WLS 10 上,这些库已经集成。 为避免冲突,我将我的 WAR 放入带有以下 weblogic-application.xml 的 EAR:

<?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 上使用它。

知道什么可能导致这种冲突吗?

【问题讨论】:

  • 如果你想让他们从战争中加载,不应该将prefer-web-inf-classes设置为true吗?
  • 我认为这部分已经有效。另外,prefer-web-inf-classes 不是用来用来自 WEB-INF/classes 的类覆盖 weblogic 类吗?因为在这里我想做的是用来自 WEB-INF/lib/*.jar 的类覆盖来自 Weblogic 的类
  • 两者都适用 - 你的 lib/*.jar 将优先于 Weblogic 自己的版本加载。
  • 无论如何。再一次,这部分似乎有效。问题是为什么它无法找到属于它所运行的 JDK 的类?

标签: java spring weblogic jax-ws weblogic-10.x


【解决方案1】:

我不确定这会有什么好处,但它适用于我需要启动委托设置的用例。

每个应用程序服务器都有一个配置设置文件(通常是 .properties,例如 weblogic.properties、sling.properties....)。您可能需要添加以下行

".bootdelegation.com.sun=com.sun.*"

例如

对于 weblogic Server    :“weblogic.bootdelegation.com.sun=com.sun.*”
对于 Adob​​e CQ 服务器:“sling.bootdelegation.com.sun=com.sun.*”

这将适用于与此线程问题相关的大多数问题。

现在解释一下,com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl 已经与 rt.jar 打包在一起,它是 JDK 的每个运行时库的一部分/杰瑞。然而,这个包在启动应用程序时会被完全忽略。当明确指示通过应用程序配置加载时,会加载正确的实现类(这是 .bootdelegation. 所做的)。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    docs 开始,当您为com.sun.xml.* 指定prefer-application-packages 时,这些包是从应用程序加载的,而不是系统类加载器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2012-02-28
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      相关资源
      最近更新 更多