【问题标题】:java.lang.NoSuchFieldError: INSTANCE only when running on Tomcatjava.lang.NoSuchFieldError: 仅在 Tomcat 上运行时的实例
【发布时间】:2021-10-22 16:01:45
【问题描述】:

我正在使用 Apache 的 httpcomponents 连接到 Web 服务。当我运行测试时,初始化客户端没有问题。然而,当我想做一个实际的集成测试时,我得到了上述异常并带有以下堆栈跟踪:

java.lang.NoSuchFieldError: INSTANCE
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:151)
    at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:969)
    at eu.sonetas.fuga.rs.foo.FooRs.<init>(IbanityRs.java:64)
    at eu.sonetas.fuga.rs.foo.FooRs_EInvoicing.<init>(fooRs_EInvoicing.java:45)

我正在使用 httpclient 4.5.13、httpcore 4.4.14 和 httpmime 4.5.13(所有最新版本)和 tomcat 9.0.6。

我不使用任何构建工具,而且我很确定我的类路径上没有上述 jar 的其他版本。

这是出错的调用代码:

public FooRs() throws FooException {
        try {
            SSLContext sslContext = SSLContexts.custom()
                .loadKeyMaterial(readStore(), KEYPASS.toCharArray())
                .build();
                this.httpClient = HttpClients.custom().setSSLContext(sslContext).build();
                //
        } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException | UnrecoverableKeyException e) {
            throw new FooException("Could not initialize FooRs:" + e.getMessage());
        }
        
    }

【问题讨论】:

  • 你的项目是怎样设置的?
  • 没有4.4.15版本的httpcore
  • 最可能的原因是 httpclient 4.3 或更早版本的副本在某处落后。
  • @Mansoor,使用带有tomcat插件的vs代码
  • @PiotrP.Karwasz 是的,我想到了类似的东西,但我似乎无法找到在哪里,有什么想法可以找到这个吗?

标签: java tomcat apache-httpcomponents


【解决方案1】:

这个问题是由我的类路径上旧版本的 httpclient-cache 引起的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 2015-01-04
    • 2017-06-08
    • 1970-01-01
    • 2017-05-01
    • 2012-02-12
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多