2012-01-31 57 views
11

me encuentro con esta siguiente CXF excepción:CXF excepción cliente: Interceptor para {XXX} ha lanzado una excepción, desenrollar ahora

warning: Interceptor for {http://example.com/wsdl/esc/2011-12-12/}AmazonEC2#{http://example.com/wsdl/esc/2011-12-12/}NewDescribeImages has thrown exception, unwinding now 
java.lang.NullPointerException 
    at org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor.handleMessage(StartBodyInterceptor.java:59) 
    at org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor.handleMessage(StartBodyInterceptor.java:37) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:762) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1582) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1467) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1375) 
    at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47) 
    at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188) 
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623) 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:510) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:343) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:295) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124) 
    at $Proxy31.newDescribeImages(Unknown Source) 
    at test.App.main(App.java:62) 
javax.xml.ws.soap.SOAPFaultException: Fault string, and possibly fault code, not set 

el código que hace que esta excepción:

MyService ms =new MyService(); 
    MyServicePort port = ms.getAmazonEC2Port(); 
    BindingProvider bp = (BindingProvider) port; 
    bp.getRequestContext() 
      .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
        "http://192.180.33.12:8773/services/myservice_url/"); 

    Client client = ClientProxy.getClient(portType); 
    client.getInInterceptors().add(new LoggingInInterceptor()); 
    client.getOutInterceptors().add(new LoggingOutInterceptor()); 
    Endpoint endpoint = client.getEndpoint(); 

    Map<String, Object> inProps=new HashMap<String, Object>(); 
    Map<String,Object> outProps = new HashMap<String,Object>(); 
    configWSProps(inProps, outProps); //here is some WS-Security properties 

    WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps); 
    WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); 

    endpoint.getInInterceptors().add(wssIn); 
    endpoint.getOutInterceptors().add(wssOut); 

    SomeResponseType response = port.someMethod(); 

Esta excepción es lanzado en la última línea: port.someMethod(). En el método configWSProps (...) configuré algunas propiedades de WS-Security, no es probable que tenga un problema aquí.

Imprimí los registros de cxf, puedo ver que el mensaje de entrada tiene los datos correctos.

Desde el código fuente de CXF, parece que CXF no puede recuperar el mensaje de jabón, pero no sé cómo resolverlo. ¡Por favor, ayúdame!

aquí está el código fuente de CXF: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-rt-bindings-soap/2.4.1/org/apache/cxf/binding/soap/interceptor/StartBodyInterceptor.java/#59

Respuesta

14

Después de la depuración en el código cxf y buscar ayuda en la lista de correo cxf, finalmente resuelto este problema. El problema está causado por el mensaje entrante, el mensaje http carece del encabezado de tipo de contenido, lo que hace que CXF no pueda crear un XMLStreamReader y luego no pudo leer el contenido, por lo que se genera una NullPointerException. ¡Muchas gracias a los chicos de la comunidad CXF!

me hizo una pregunta y respuesta allí tiene: http://cxf.547215.n5.nabble.com/CXF-client-exception-Interceptor-for-XXX-has-thrown-exception-unwinding-now-td5449373.html#a5449764

+0

Puede explicar lo que ha cambiado en el código para resolver el problema? –

+1

No lo recuerdo, hace mucho tiempo. ¿Tal vez inyecté el encabezado de tipo de contenido en alguna parte? – Wint

Cuestiones relacionadas