Я хочу использовать apache httpclient для взаимодействия с webservices. В частности, я использую http://mirror.arcor-online.net/www.apache.org//httpcomponents/httpclient/binary/httpcomponents-client-4.3-bin.zipApache HttpClient в MATLAB 2012+
Так в MATLAB я загружаю все включенные банки в в javaclasspath, а затем я могу создать для клиента, например для работы с:
В MATLAB 2007b и 2011b (те, являются версии у меня есть):
client = org.apache.http.impl.client.HttpClients.createDefault()
client =
[email protected]
в 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)
Это реа lly bugging me, так как код в 2011b и 2012b идентичен, все jar загружены, и оба Java-версии, идущие с MATLAB, также идентичны (1.6.0_17-b04). Так что я действительно не понимаю, почему классы стали разгружаемыми в 2012 году.
Я пытался играть вокруг с 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
Я также попытался поставить все JAR-файлы на статическую - путь к классам, которые не имеют никакого влияния ни. Радует любые идеи о том, как решить эту проблему и как найти фактическую причину проблемы ...
Я не проверял, но, возможно, MATLAB уже поставляется с (возможно, более старой) версией этой библиотеки для собственного использования? – Amro
Это может помочь в диагностике проблемы: http://stackoverflow.com/a/4380622/97160. Если это действительно проблема конфликтующих версий, есть обходные пути для переопределения банок MATLAB: http://stackoverflow.com/q/16366059/97160 – Amro
Hm, но затем 'методыview org.apache.http.impl.conn.ManagedHttpClientConnectionFactory' должен показывать что-то еще до того, как я добавлю jar-файлы Apache в javaclasspath, не так ли? Это не так, это ошибка с 'No class found ...' – sebastian