InternalHttpClient не может быть преобразован в HttpClient.
Я создал заглушку клиента axis2 с помощью команды WSDL2Java и пытаюсь вызвать стороннюю веб-службу. Я вижу эту ошибку в консоли:
java.lang.ClassCastException: class org.apache.http.impl.client.InternalHttpClient cannot be cast to class org.apache.commons.httpclient.HttpClient (org.apache.http.impl.client.InternalHttpClient and org.apache.commons.httpclient.HttpClient are in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @674c583e)
at org.apache.axis2.transport.http.AbstractHTTPSender.getHttpClient(AbstractHTTPSender.java:529)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:157)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
Мы устанавливаем свойство CACHED_HTTP_CLIENT следующим образом (поместите обе строки):
MyStub stub = new MyStub() ;
stub._getServiceClient().getOptions().setProperty(HTTPConstants.CACHED_HTTP_CLIENT, customHttpClient);
stub._getServiceClient().getServiceContext()
.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, customHttpClient);
Но почему-то AbstractHttpSender.getHttpClient не может получить наш HttpCLient. Это строка в классе AbstractHttpSender, где создается исключение ClassCastException:
HttpClient httpClient = (HttpClient) msgContext.getProperty(
HTTPConstants.CACHED_HTTP_CLIENT);
Нужно ли мне передавать что-нибудь в конструктор MyStub(), чтобы убедиться, что HttpClient установлен правильно в MessageContext?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Я вижу проблему. HttpClient выше — это org.apache.commons.httpclient.HttpClient, а не org.apache.http.client.HttpClient (как я думал ранее). Как мне теперь это решить? Есть ли способ, чтобы заглушка клиента axis2 не обращалась к AbstractHttpSender и не переходила к классу, который использует org.apache.http.client.HttpClient?