java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE [英] java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE

查看:24
本文介绍了java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

美好的一天!

我需要帮助!

我为 android 开发应用程序,并集成了 IIS(SharePoint).当我运行此代码(代码 2)时,出现错误

<块引用>

java.lang.NoSuchFieldError:org.apache.http.message.BasicLineFormatter.INSTANCE

我在 firstActivity 的 onCreate(Code 1) 方法中运行此代码

版本 httpclient - 4.3;

代码 1

new Thread(new Runnable() {@覆盖公共无效运行(){新的 HttpsClietn();}}).跑();

代码 2

package com.example.HttpsMy;导入 android.os.Environment;导入 org.apache.http.auth.AuthScope;导入 org.apache.http.auth.NTCredentials;导入 org.apache.http.client.CredentialsProvider;导入 org.apache.http.client.HttpClient;导入 org.apache.http.client.methods.HttpGet;导入 org.apache.http.client.protocol.HttpClientContext;导入 org.apache.http.conn.ssl.SSLConnectionSocketFactory;导入 org.apache.http.impl.client.BasicCredentialsProvider;导入 org.apache.http.impl.client.HttpClientBuilder;导入 javax.net.ssl.KeyManagerFactory;导入 javax.net.ssl.SSLContext;导入 javax.net.ssl.TrustManager;导入 javax.net.ssl.X509TrustManager;导入 java.io.File;导入 java.io.FileInputStream;导入 java.io.IOException;导入 java.io.InputStream;导入 java.security.*;导入 java.security.cert.CertificateException;导入 java.security.cert.X509Certificate;公共类 HttpsClietn {HttpsClietn() 抛出 KeyManagementException、NoSuchAlgorithmException、KeyStoreException、IOException、CertificateException、UnrecoverableKeyException {CredentialsProvider credsProvider = new BasicCredentialsProvider();credsProvider.setCredentials(AuthScope.ANY, new NTCredentials("Grigoriy.Polyakov","password", "", "domain.kz"));HttpClientContext 上下文 = HttpClientContext.create();context.setCredentialsProvider(credsProvider);HttpGet httpget = new HttpGet("https://server.domain.kz");HttpClient 客户端 = HttpClientBuilder.create().setSSLSocketFactory(getFactory()).setDefaultCredentialsProvider(credsProvider).setSslcontext(getContext()).建造();System.out.println(client.execute(httpget,context).getStatusLine());}SSLContext getContext() 抛出 NoSuchAlgorithmException、KeyStoreException、IOException、KeyManagementException、CertificateException、UnrecoverableKeyException {//新文件("key/keystore.p12"), "1234"KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());KeyStore keyStore = KeyStore.getInstance("PKCS12");InputStream keyInput = new FileInputStream(new File(Environment.getExternalStorageDirectory().getPath()+"/kvv/keystore.p12"));keyStore.load(keyInput, "1234".toCharArray());keyInput.close();keyManagerFactory.init(keyStore, "1234".toCharArray());TrustManager[] trustAllCerts = new TrustManager[]{新 X509TrustManager() {@覆盖public void checkClientTrusted(X509Certificate[] x509Certificates, String s) 抛出 CertificateException {}公共 java.security.cert.X509Certificate[] getAcceptedIssuers() {返回空;}public void checkServerTrusted(X509Certificate[] certs, String authType) {}}};SSLContext context = SSLContext.getInstance("TLS");context.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom());返回上下文;}SSLConnectionSocketFactory getFactory() 抛出 CertificateException、UnrecoverableKeyException、NoSuchAlgorithmException、KeyStoreException、KeyManagementException、IOException {返回新的 SSLConnectionSocketFactory(getContext());}}

感谢您的帮助.

解决方案

Google Android 附带了一个非常过时(测试版 4.0 之前)的 Apache HttpClient 分支.由于类路径上存在旧类,除非所有类都移动到另一个命名空间 ('org.apache.http' -> 'thank.you.google.http')

确保 Apache HttpClient 的股票版本不与其原始命名空间重叠的一种方法是使用 Maven Shade 插件,使用由 Dirk Boye 开发的端口,或Apache HttpClient 到 Google Android 的官方端口.

Good day!

I need help!

I develop app for android with integration the IIS(SharePoint). And when i run this code(Code 2), i get ERROR

java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE

I run this code in firstActivity in method onCreate(Code 1)

Version httpclient - 4.3;

Code 1

new Thread(new Runnable() {
            @Override
            public void run() {
                    new HttpsClietn();
    }
}).run();

Code 2

package com.example.HttpsMy;

import android.os.Environment;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;


import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class HttpsClietn {
    HttpsClietn() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException, UnrecoverableKeyException {

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(AuthScope.ANY, new NTCredentials("Grigoriy.Polyakov","password", "", "domain.kz"));

        HttpClientContext context = HttpClientContext.create();
        context.setCredentialsProvider(credsProvider);

        HttpGet httpget = new HttpGet("https://serveer.domain.kz");


       HttpClient client = HttpClientBuilder.create()
               .setSSLSocketFactory(getFactory())
               .setDefaultCredentialsProvider(credsProvider)
               .setSslcontext(getContext())
               .build();

        System.out.println(client.execute(httpget,context).getStatusLine());

    }

    SSLContext getContext() throws NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException, CertificateException, UnrecoverableKeyException {
        //new File("key/keystore.p12"), "1234"
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        KeyStore keyStore = KeyStore.getInstance("PKCS12");

        InputStream keyInput = new FileInputStream(new File(Environment.getExternalStorageDirectory().getPath()+"/kvv/keystore.p12"));
        keyStore.load(keyInput, "1234".toCharArray());
        keyInput.close();

        keyManagerFactory.init(keyStore, "1234".toCharArray());

        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                    }

                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    }
                }
        };

        SSLContext context = SSLContext.getInstance("TLS");
        context.init(keyManagerFactory.getKeyManagers(), trustAllCerts, new SecureRandom());

        return context;
    }

    SSLConnectionSocketFactory getFactory() throws CertificateException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
        return new SSLConnectionSocketFactory(getContext());
    }
}

Thanks for any help.

解决方案

Google Android ships with an extremely outdated (pre BETA 4.0) fork of Apache HttpClient. Due to the presence of old classes on the classpath the stock version of HttpClient fails to initialize correctly unless all classes are moved to another namespace ('org.apache.http' -> 'thank.you.google.http')

One way of making sure the stock version of Apache HttpClient does not overlap with its original namespace is repackaging it with the Maven Shade plugin, use the port developed by Dirk Boye, or the official port of Apache HttpClient to Google Android.

这篇关于java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆