2011-12-28 9 views
5

करने के लिए कस्टम अनुरोध marshallers मैं JAXRSClientFactory उपयोग करते हुए मेरे RESTful सेवा का उपयोग करने की कोशिश कर रहा हूँ - और मैं (मैं सूची को क्रमानुसार करने की जरूरत है)भेजने से JAXRSClientFactory

कोड इस तरह दिखता है के लिए अनुरोध/प्रतिक्रिया मैपिंग प्रकार विन्यास की आपूर्ति के साथ अटक कर रहा हूँ :

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

config.xml लगता है:

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

जब ग्राहक कोड डिबगिंग, मैं org.apache.cxf.jaxrs.provide भीतर देख सकते हैं कि r.ProviderFactory कॉल

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

तथापि messageWriters मेरी प्रदाता शामिल नहीं करता है। मेरे कोड में क्या गलत है और संदेशबॉडीवाइटर को सही तरीके से कैसे प्रदान किया जाए? अग्रिम में धन्यवाद!

उत्तर

5

असल समस्या createdFromAPI से संबंधित था = "true"

तो मैं एक्सएमएल फ़ाइल से छुटकारा और जो विधि पैरामीटर के रूप में संदेश के मुख्य भाग प्रदाताओं की सूची को स्वीकार करता है JAXRSClientFactory, के विशेष संस्करण का उपयोग किया गया

यदि मूल प्रमाणीकरण प्रदान करने की आवश्यकता है - तो

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

अब एक config.getHttpConduit() विधि है जो उस कोड को एक छोटा सा साफ़ करता है। –