java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE [英] 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屋!