2011-05-19 3 views
4

Il s'agit plutôt d'une question d'utilisation de base de cxf. Comment/où pouvons-nous attraper l'exception/erreur HTTP réelle? J'ai un peu suivi le concept Interceptor/MessageObserver mais je n'ai pas pu capturer l'erreur HTTP en les utilisant. Je vois cette erreur dans le fichier journal log4j.CXF - attraper/gérer les exceptions HTTP

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 

Seule javax.xml.ws.WebServiceException avec "Impossible d'envoyer un message". message est lancé, tout en appelant le service

try{ 

     GetListCollectionResult result = port.getListCollection(); 

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

} 

Voilà comment nous appelons le service.

Pour fournir des informations NTLM:

Authenticator.setDefault(extended class of Authenticator); 

créer le service.

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

Mettre à jour le conduit.

..

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

service d'appel et obtenir le résultat.

GetListCollectionResult result = port.getListCollection(); 

Répondre

1

Nevermind, j'ai trouvé la réponse dans la liste de diffusion CXF.

excep.getCause() 

donne accès à l'exception sous-jacente, dans mon cas, il s'agit de l'exception de transport HTTP.

Questions connexes