2011-05-29 24 views
5

को बनाएं और लिंक XSD मैं JAX-आरएस कि तर्क के रूप में मनमाने ढंग से जटिल वस्तुओं में लेने की जरूरत का उपयोग कर कुछ सेवाओं का निर्माण कर रहा हूँ, न सिर्फ पूर्णांकों और तार की तरह पुरातन। A discussion on the CXF mailing list सिर्फ इस मामले में एक एकल पैरामीटर के रूप में एक आवरण वस्तु का उपयोग करने के कहते हैं।एक WADL

मेरी चिंता यह है कि सेवा में इनपुट प्रारूप को कैसे दस्तावेज़ित किया जाए? यदि एक सेवा है जो निम्नलिखित की तरह कुछ लग रहा है बनाने:

@POST 
@Produces("application/json") 
@Consumes("application/json") 
@Path("oneParam") 
public ComplexObject2 myServiceMethod(ComplexObject1 obj) { 
    Foo f = obj.foo 
    Bar b = obj.bar 
    ... 
} 

स्वत: जनरेट WADL CXF पैदा करता है कि केवल निम्न का उत्पादन करेगा:

<resource path="/oneParam"> 
    <method name="POST"> 
     <request> 
      <representation mediaType="application/json"/> 
     </request> 
     <response> 
      <representation mediaType="application/json"/> 
     </response> 
    </method> 
</resource> 

यह वही अनुरोध या वास्तव में प्रतिक्रिया पर कोई जानकारी नहीं होती शामिल हैं। सेर्गेई CXF मेलिंग सूची पर कहा कि यह प्रतिनिधित्व करने के लिए एक स्कीमा से जोड़ने के लिए संभव हो गया था, लेकिन कैसे मुझे लगता है कि क्या करना चाहिए? और मैं एक्सएसडी कैसे बना सकता हूं?

(पी एस idempotent संसाधनों के लिए पोस्ट का उपयोग RESTful नहीं हो सकता है, लेकिन यह यहाँ महत्वपूर्ण नहीं है के रूप में हम सार Json का उपयोग कर आरपीसी करने में कर रहे हैं यह वह जगह है और अधिक या कम एक 1:।। एक मौजूदा सोप आधार पर API का 1 क्लोन)

+0

स्कीमा डेवलपर्स पता लगाना क्या भेजा है और लौट आए, जरूरी नहीं कि एक मशीन द्वारा उत्पादन को मान्य करने के है मदद करने के लिए है। तो यह एक्सएमएल पर लागू होता है और जेसन मेरे लिए इतना महत्वपूर्ण नहीं है। – oligofren

उत्तर

6

यह एक WADL फ़ाइल में एक XSD फ़ाइल से जोड़ने के लिए और फिर अनुरोध और प्रतिक्रिया के लिए प्रतिनिधित्व में एक XML तत्व को संदर्भित करने के लिए संभव है। हालांकि, चूंकि यह एक्सएमएल स्कीमा है, यह JSON प्रस्तुतियों पर लागू नहीं होता है।

एक एक्सएसडी को एक WADL फ़ाइल में जोड़ने के लिए, मुख्य resources तत्व से पहले फ़ाइल के शीर्ष पर grammars तत्व बनाएं।

<grammars> 
    <include href="myapp.xsd"/> 
</grammars> 

तो इस प्रकार एक XML तत्व के लिए एक संदर्भ जोड़ने (अपने उदाहरण का एक संशोधित संस्करण का उपयोग कर):

<resource path="/oneParam"> 
    <method name="POST"> 
     <request> 
      <representation mediaType="application/xml" element="myapp:oneParamRequest" /> 
     </request> 
     <response> 
      <representation mediaType="application/xml" element="myapp:oneParamResponse" /> 
     </response> 
    </method> 
</resource> 

उपसर्ग myapp XSD में परिभाषित किया गया है और WADL फ़ाइल में इस्तेमाल किया जा सकता भी।

मैं CXF कॉन्फ़िगर करने के लिए करने के लिए स्वचालित रूप से ऐसा करने के लिए पता नहीं है। जर्सी के साथ मेरा अनुभव समान है और हम जेनरेटेड WADL को बाद में हाथ-संपादन के लिए प्रारंभिक बिंदु के रूप में उपयोग करते हैं।

+0

धन्यवाद! मुझे अब यह जांचने का कोई मौका नहीं है, लेकिन ऐसा लगता है कि मुझे बस इतना ही चाहिए। मुझे सीएक्सएफ को कॉन्फ़िगर करने के बारे में कोई जानकारी नहीं है, लेकिन जीवन एक रास्ता पाता है :) – oligofren