seb*_*ian 6 java matlab apache-httpclient-4.x
我想使用apache httpclient与webservices进行交互.具体来说,我正在使用 http://mirror.arcor-online.net/www.apache.org//httpcomponents/httpclient/binary/httpcomponents-client-4.3-bin.zip
所以在MATLAB中我将所有包含的jar加载到javaclasspath中然后我可以创建到client-instance来使用:
在MATLAB 2007b和2011b中(这些是我的版本):
client = org.apache.http.impl.client.HttpClients.createDefault()
client =
org.apache.http.impl.client.InternalHttpClient@1e89831
Run Code Online (Sandbox Code Playgroud)
在2012b:
>> client = org.apache.http.impl.client.HttpClients.createDefault()
Java exception occurred:
java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:72)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:84)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:59)
at
org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:487)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:147)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:136)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:112)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:710)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58)
>> client = org.apache.http.impl.client.HttpClients.createDefault()
Java exception occurred:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.http.impl.conn.ManagedHttpClientConnectionFactory
at
org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:487)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:147)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:136)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:112)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:710)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58)
Run Code Online (Sandbox Code Playgroud)
这真是让我烦恼,因为2011b和2012b中的代码是相同的,所有jar都被加载,并且MATLAB中的两个Java版本也是相同的(1.6.0_17-b04).所以我真的不明白为什么课程在2012b中变得无法加载.
我尝试使用matlab类加载器 - 但这让我更加困惑:
>> jloader = com.mathworks.jmi.ClassLoaderManager.getClassLoaderManager();
>> jloader.loadClass('org.apache.http.impl.conn.ManagedHttpClientConnectionFactory')
Java exception occurred:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.http.impl.conn.ManagedHttpClientConnectionFactory
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.mathworks.jmi.ClassLoaderManager.loadClass(ClassLoaderManager.java:440)
>> jloader.getCurrentClassLoader.loadClass('org.apache.http.impl.conn.ManagedHttpClientConnectionFactory')
ans =
class org.apache.http.impl.conn.ManagedHttpClientConnectionFactory
Run Code Online (Sandbox Code Playgroud)
我也尝试将所有jar文件放到静态类路径上 - 这也没有任何影响.很高兴有关如何解决这个或如何找到问题的实际原因的任何想法...
小智 4
您的类路径上的 httpclient 和 httpcore 版本不匹配。看来您只升级了 httpclient,但没有升级其依赖项。您可以在 Apache HttpClient 项目页面上看到依赖项列表。http://hc.apache.org/httpcomponents-client-4.3.x/httpclient/dependency.html
您还应该确保类路径上没有多个版本的依赖项。MATLAB 2012b 似乎已经有一个 httpcore 版本,这就是您遇到此冲突的原因。
| 归档时间: |
|
| 查看次数: |
5106 次 |
| 最近记录: |