2011-12-28 3 views
5

Próbuję wywołać moje relaksującego usługi przy użyciu JAXRSClientFactory - i utknąłem z dostarczania konfiguracji do mapowania typów żądanie/odpowiedź (muszę serializacji listę)Składanie zwyczaj żądania marshallers do JAXRSClientFactory

Kod wygląda następująco :

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

config.xml wygląda następująco:

<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> 

teraz podczas debugowania kodu klienta, widzę, że w ciągu org.apache.cxf.jaxrs.provide r.ProviderFactory jest wywołanie

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

jednak messageWriters nie zawiera mojego dostawcy. Co jest nie tak z moim kodem i jak poprawnie dostarczyć MessageBodyWriter? Z góry dziękuję!

Odpowiedz

5

Zasadniczo problem wiązał się createdFromAPI = „true”

więc pozbyłem pliku XML i wykorzystywane wyspecjalizowaną wersję JAXRSClientFactory, który akceptuje listę dostawców treści wiadomości jako parametr metody

Jeśli istnieje potrzeba dostarczenia podstawowego uwierzytelnienia - wówczas

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

Istnieje teraz metoda config.getHttpConduit(), która czyści ten kod odrobinę. –