2011-12-28 8 views
5

estoy tratando de invocar a mi servicio REST utilizando JAXRSClientFactory - y estoy atascado con el suministro de configuración para tipos de petición/respuesta mapeos (necesito para serializar Lista)enviar solicitud de encargo señaleros a JAXRSClientFactory

El código es el siguiente :

JAXRSClientFactory.create("http://localhost:8080/", MyCoolService.class, "/path/to/client/config.xml"); 

el config.xml se parece a:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
     xsi:schemaLocation=" 
     http://cxf.apache.org/jaxrs 
     http://cxf.apache.org/schemas/jaxrs.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     "> 

    <jaxrs:client id="testClient" createdFromAPI="true"> 
     <jaxrs:providers> 
      <bean class="my.provider.Class"/> 
     </jaxrs:providers> 
    </jaxrs:client> 

</beans> 

ahora al depurar código de cliente, puedo ver que dentro de org.apache.cxf.jaxrs.provide r.ProviderFactory existe la llamada

MessageBodyWriter<T> mw = chooseMessageWriter(messageWriters, 
                bodyType, 
                parameterType, 
                parameterAnnotations, 
                mediaType, 
                m); 

sin embargo messageWriters no contiene el profesional. ¿Qué está mal con mi código y cómo proporcionar MessageBodyWriter correctamente? ¡Gracias por adelantado!

Respuesta

5

Básicamente, el problema estaba relacionado con createdFromAPI = "true"

Así que me libré del archivo XML y se utiliza versión especializada de JAXRSClientFactory, que la lista de proveedores cuerpo del mensaje como parámetro del método acepta

Si existe la necesidad de proporcionar la autenticación básica - a continuación,

ClientConfiguration config = WebClient.getConfig(proxy); 
    HTTPConduit conduit = (HTTPConduit) config.getConduit(); 
    AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy(); 
    authorizationPolicy.setUserName(USERNAME);      
    authorizationPolicy.setPassword(PASSWORD);     
    conduit.setAuthorization(authorizationPolicy); 
+2

ahora hay un método config.getHttpConduit() que limpia el código un poco pequeña. –

Cuestiones relacionadas