CXF - перехват / обработка исключений HTTP - PullRequest
4 голосов
/ 19 мая 2011

Это довольно простой вопрос использования cxf.Как / где мы можем поймать фактическое исключение / ошибку HTTP.Я как бы следовал концепции Interceptor / MessageObserver, но не смог зафиксировать ошибку HTTP, используя их.

Я вижу эту ошибку в файле журнала log4j.

Caused by: org.apache.cxf.transport.http.HTTPException: HTTP response
'401: Unauthorized' when communicating with http://10.107.172.79/test/_vti_bin/lists.asmx
                at  org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1502)
                at org.apache.cxf.transpot.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1448)
                at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1356)
                at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
                at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:614)
                at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
                ... 9 more

Только javax.xml.ws.WebServiceException с «Не удалось отправить сообщение».сообщение вызывается при вызове службы

try{

      GetListCollectionResult result = port.getListCollection();

   }catch (javax.xml.ws.WebServiceException excep){

}

Вот как мы называем службу.

Чтобы предоставить учетные данные NTLM:

Authenticator.setDefault( extended class of Authenticator);

Создайте службу.

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ListsSoap.class);
factory.setAddress(list_url);
ListsSoap port = (ListsSoap) factory.create();

Обновите канал.

..

        Client client = ClientProxy.getClient(port);
        HTTPConduit http = (HTTPConduit) client.getConduit();
        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        httpClientPolicy.setConnectionTimeout(36000);
        httpClientPolicy.setAllowChunking(false);
        http.setClient(httpClientPolicy);

Позвоните в службу поддержки и получите результат.

GetListCollectionResult result  = port.getListCollection();

1 Ответ

1 голос
/ 20 мая 2011

Неважно, я нашел ответ в списке рассылки CXF.

excep.getCause()

предоставляет доступ к базовому исключению, в моем случае это исключение транспорта HTTP.

...