2012-02-23 19 views
5

में मौजूद नहीं हैं हम वसंत के साथ सीएक्सएफ 2.5.2 का उपयोग आराम से सेवाओं को उजागर करने और उपभोग करने के लिए करते हैं। सेवा इंटरफ़ेस वर्गों के वितरण के लिए, हम wadl2java लक्ष्य जिसकी वजह से मैं लगता है, उत्पन्न इंटरफेस सभीसीएक्सएफ जेएक्सआरएस | जटिल प्रतिक्रिया प्रकार जेनरेटेड वैडल

उत्पन्न WADL नहीं करता है, उचित प्रतिक्रिया प्रकार के होते हैं (जो दिया WADL फ़ाइल पर आधारित इंटरफेस वर्गों उत्पन्न करता है) का उपयोग शुरू किया रिटर्न प्रकार के रूप में 'प्रतिक्रिया'।

पूर्व। 'प्रतिक्रिया'

कर सकते हैं के रूप में वापसी प्रकार शामिल

<response><representation mediaType="application/json"/></response>

और इस WADL फ़ाइल से इसी इंटरफ़ेस: शोकहारा प्राप्त विधि रिटर्न 'सूची' अगर, उत्पन्न WADL केवल निम्नलिखित खंड शामिल कोई सुझाव देता है कि वास्तविक प्रतिक्रिया प्रकार को खोने से रोकने के लिए क्या करने की आवश्यकता है? क्या कोई टिप्पणी है (जैसे ElementClass? इसका उपयोग कैसे करें?) या प्रदाताओं की आवश्यकता है?

वर्तमान कोड:

@GET 
@Path("/itemsForCategory") 
@Produces("application/json") 
@Description("getItemsForCategory") 
public List<Item> getItemsForCategory(@QueryParam("category")String category) { 
+0

मिला http://cxf.547215.n5.nabble.com/Problem-with-WADL- जनरेशन-and-returning-a-List-of-objects-td4713351.html#a5507490। सुनिश्चित नहीं है कि यह – crankparty

उत्तर

-1

मैं इसी तरह के मुद्दों था जब सूचियों, नक्शे आदि के साथ काम कर चूंकि एकत्रीकरण क्रम में अपने प्रकार पता नहीं है जब एक डबल्यूएसडीएल प्रकार है कि आप संग्रह में डाल दिया अनदेखी कर रहे हैं पैदा । इसका अपवाद, मैंने पाया, जब एक और वेब सेवा उजागर विधि उस विशेष प्रकार का उपयोग करती थी। एक काम के रूप में मैंने एक डमी विधि बनाई जिसने सूचियों और मानचित्रों के लिए आवश्यक प्रत्येक प्रकार का उपयोग किया।

तो उदाहरण के लिए, मेरे पास उपयोगकर्ता नामक एक वर्ग था जिसने बेसऑब्जेक्ट नामक एक अमूर्त वर्ग को बढ़ाया जिसका उपयोग सीधे webservice द्वारा नहीं किया गया था। हालांकि उपयोगकर्ताओं के लिए खोज करते समय इसे कभी-कभी सूचियों के माध्यम से पारित किया जाता था। निम्नलिखित कोड मेरा कामकाज था।

@WebService 
public interface MyService 
{ 
    // Various @WebMethods here 

    /** 
    * This method should not be used. This is a workaround to ensure that 
    * User is known to the JAXB context. Otherwise you will get exceptions like this: 
    * javax.xml.bind.JAXBException: class java.util.User nor any of its super class is known to this context. 
    * Or it will assume that using BaseObject is OK and deserialisation will fail 
    * since BaseObject is abstract. 
    * This issue occurs because the classes available to the JAXB context 
    * are loaded when the endpoint is published. At that time it is not known 
    * that User will be needed since it is not explicitly referenced 
    * in any of these methods. Adding user here will cause it to be added to 
    * the context. 
    * @param user 
    * @return 
    */ 
    @WebMethod 
    void dummy(@WebParam(name="user") User user); 
} 

मैं मानता इस के चारों ओर एक बुरा काम का एक सा है और मैं इसे एक उचित ठीक नहीं मानते, लेकिन शायद यह जा रहा रखने जब तक किसी को एक बेहतर समाधान प्रदान कर सकते हैं होगा।

उम्मीद है कि इससे मदद मिलती है।

2

जेनेरिक "प्रतिक्रिया" रिटर्न प्रकार इस तथ्य से असंबंधित प्रतीत होता है कि आप एक सूची वापस करने की कोशिश कर रहे हैं। यही है, रिटर्न प्रकार के रूप में "आइटम" का उपयोग करने के परिणामस्वरूप जेनरेट इंटरफ़ेस में "प्रतिक्रिया" के रिटर्न प्रकार के साथ एक विधि होगी। इसे ठीक करने के आप WADL संसाधन जवाब में तत्व विशेषता जोड़ने की जरूरत:

<response><representation mediaType="application/json" element="item"/></response> 

यह काम करता है अगर आप WADL सीधे संशोधित, एक बराबर JAX-आरएस एनोटेशन समर्थित नहीं हो सकता है या हो सकता है। यह आपकी सूची को वापस लौटने में आपकी समस्या का समाधान नहीं करता है। मेरा सुझाव (जिसे मैंने पहले उपयोग किया है) एक रैपर सूची प्रकार (उदा। आइटमलिस्ट) बनाना है जो सूची रिटर्न प्रकार को समाहित करता है।

किसी भी मामले में, आपको नीचे से नीचे तक (यानी, WADL पहले) कार्यान्वयन से फ़्लिप करने की आवश्यकता होगी। यह बहुत बुरा नहीं होना चाहिए, क्योंकि आपके पास पहले से ही कार्यान्वयन है और आप इसे जेनरेट किए गए इंटरफ़ेस को कार्यान्वित कर सकते हैं।

यह सब स्पष्ट करने के लिए, मैंने मानक जेएक्स-आरएस "बुकस्टोर" उदाहरण के आधार पर एक साधारण उदाहरण परियोजना बनाई। आप pom (wadl2java कॉन्फ़िगरेशन के साथ) और github पर वास्तविक wadl देख सकते हैं। जेनरेट कोड भी वहां है (उदा।, BookstoreidResource.java)।

+0

तय किया गया है रेपो अब मौजूद नहीं है –

संबंधित मुद्दे