【问题标题】:java.lang.NoSuchMethodError: org/apache/http/conn/scheme/Scheme.<init>(Ljava/lang/String;ILorg/apache/http/conn/scheme/SchemeSocketFactory;)Vjava.lang.NoSuchMethodError: org/apache/http/conn/scheme/Scheme.<init>(Ljava/lang/String;ILorg/apache/http/conn/scheme/SchemeSocketFactory;)V
【发布时间】:2018-03-23 01:11:26
【问题描述】:

我正在尝试使用 HttpComponentsMessageSender 在 Spring WebServiceTemplate 中设置 ConnectionTimeoutReadTimeout。但是,对于 SchemeSocketFactory 类,我得到了 NoSuchMethodError

<bean
    class="org.springframework.ws.transport.http.HttpComponentsMessageSender"
    id="timeoutId">
    <property name="connectionTimeout" value="3000" />
    <property name="readTimeout" value="3000" />
</bean>

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.ws.transport.http.HttpComponentsMessageSender]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org/apache/http/conn/scheme/Scheme.<init>(Ljava/lang/String;ILorg/apache/http/conn/scheme/SchemeSocketFactory;)V
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1147)
    ... 65 more
Caused by: java.lang.NoSuchMethodError: org/apache/http/conn/scheme/Scheme.<init>(Ljava/lang/String;ILorg/apache/http/conn/scheme/SchemeSocketFactory;)V
    at org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:51)
    at org.apache.http.impl.conn.PoolingClientConnectionManager.<init>(PoolingClientConnectionManager.java:96)
    at org.springframework.ws.transport.http.HttpComponentsMessageSender.<init>(HttpComponentsMessageSender.java:77)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:80)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:539)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
    ... 67 more

【问题讨论】:

  • 可以帮忙SOF
  • websphere 的发布和维护级别是多少?
  • 版本 8.5.5.7 (8.5.5007.20150820_2101)
  • 能否在Deployment.xml中使用PARENT_LAST,这样我就不用使用共享库了?

标签: java spring websphere spring-ws


【解决方案1】:

我认为补丁包升级将为您解决此问题。 WebSphere 有一个 Apache HTTP 客户端(由其 JAX-RS 实现使用)的内部副本,在修订包 8.5.5.9 之前对已安装的应用程序是可见的。如果您想在此之前在修订包上使用自己的副本,则需要使用 PARENT_LAST 类加载器委托或隔离的共享库,以确保类加载器加载您自己的 Apache HTTP 副本而不是 WebSphere 的副本。

【讨论】:

  • 这确实有效,但现在我遇到了另一个异常:java.lang.NoClassDefFoundError: org.apache.http.conn.ssl.SSLSocketFactory(初始化失败)
  • “初始化失败”是指找到了类,但静态初始化失败。检查是否有堆栈跟踪,其中包含 SSLSocketFactory 的“clinit”方法 - 这将代表类的静态初始化程序。
  • 能否在Deployment.xml中使用PARENT_LAST,这样我就不用使用共享库了?
  • PARENT_LAST 将具有相同的基本效果。如果应用程序中存在与 PARENT_LAST 类加载器委托冲突的内容,共享库会稍微“更安全”——共享库将允许您将 PARENT_LAST 仅定位到需要它的 API,而不是将其应用于所有内容在 EAR/WAR 中。
  • 使用共享库可以正常工作。但是我得到 java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider 异常
【解决方案2】:

NoSuchMethodError 表示运行时可用的类与用于编译代码的类不同。

这通常归结为在类路径上有同一个类的多个版本。仔细检查有问题的类并删除不需要的版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2017-03-16
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多