JAX-RS में प्रदाता का क्या अर्थ है?


110

क्या कोई मुझे समझा सकता है कि JAX-RS प्रदाता क्या है और '@Provider' एनोटेशन क्या करता है? मैं प्रलेखन पढ़ रहा हूँ, लेकिन मुझे यह नहीं मिल रहा है।
यदि ऐसे संसाधन वर्ग हैं जो आने वाले अनुरोधों की सेवा करते हैं, तो प्रदाता क्या करते हैं? जब मैं लगातार संसाधन वर्ग (वह प्रति-अनुरोध नहीं है) बनाता हूं तो वे सिंगलटन संसाधन वर्गों से कैसे भिन्न होते हैं? या वे वर्ग भी प्रदाता हैं?


इसके साथ जाने के लिए: JAX-RS दस्तावेज़ "प्रोवाइडर्स" अध्याय के पहले पैराग्राफ में इसे क्यों नहीं समझाता है - तार्किक रूप से वह पृष्ठ जिसे मैं समझ पाने की तलाश में था। JAX-RS प्रलेखन पीडीएफ
जोनाथन कोमर

जवाबों:


138

प्रदाता JAX-RS रनटाइम को बढ़ाने और अनुकूलित करने का एक सरल तरीका है। आप उन्हें प्लगइन्स के रूप में सोच सकते हैं जो (संभावित रूप से) रनटाइम के व्यवहार को बदलते हैं, ताकि (प्रोग्राम परिभाषित) लक्ष्यों का एक सेट पूरा हो सके।

प्रदाता संसाधनों की कक्षाओं के समान नहीं हैं , वे मौजूद हैं, वैचारिक रूप से, संसाधनों के स्तर के बीच और JAX-RS कार्यान्वयन के स्तर पर। यदि यह मदद करता है, तो आप उन्हें डिवाइस ड्राइवरों (उपयोगकर्ता और कर्नेल स्थान के बीच मौजूदा) के समान प्रकाश में सोच सकते हैं। यह एक व्यापक सामान्यीकरण है।

वर्तमान JAX-RS विनिर्देशन द्वारा परिभाषित प्रदाताओं के तीन वर्ग हैं। उनके बीच समानता यह है कि सभी प्रदाताओं को @Provider एनोटेशन द्वारा पहचाना जाना चाहिए और निर्माता घोषणा के लिए कुछ नियमों का पालन करना चाहिए। इसके अलावा, विभिन्न प्रदाता प्रकारों में अतिरिक्त एनोटेशन हो सकते हैं, और विभिन्न इंटरफेस लागू करेंगे।


इकाई प्रदाता

ये प्रदाता अपने जावा ऑब्जेक्ट समकक्षों के लिए डेटा अभ्यावेदन (जैसे XML, JSON, CSV) की मैपिंग को नियंत्रित करते हैं।

प्रसंग प्रदाता

ये प्रदाता उस संदर्भ को नियंत्रित करते हैं जो संसाधन @ कॉन्टेक्स्ट एनोटेशन के माध्यम से एक्सेस कर सकते हैं।

अपवाद प्रदाता

ये प्रदाता जावा अपवादों की मैपिंग को JAX-RS रिस्पॉन्स उदाहरण से नियंत्रित करते हैं।


आपका रनटाइम कई पूर्वनिर्धारित प्रदाताओं के साथ आएगा जो कार्यक्षमता के आधार स्तर को लागू करने के लिए ज़िम्मेदार होंगे (जैसे XML से मैपिंग के लिए और सबसे सामान्य अपवादों आदि का अनुवाद करना)। आप आवश्यकतानुसार अपने स्वयं के प्रदाता भी बना सकते हैं।

JAX-आरएस विनिर्देश इन विभिन्न प्रकार के प्रदाता हैं और वे क्या (अध्याय 4 देखें) है पर पढ़ने के लिए एक अच्छा संदर्भ है।


धन्यवाद। मुझे लगता है कि मुझे इस बात का अंदाजा हो गया =)
आर्टेम मोस्कलेव

अच्छी तरह से समझाया @Perception। इससे वास्तव में मेरी समझ में मदद मिली।
एल-सैमुअल्स

अच्छी तरह समझाया। हालांकि एक सवाल है कि @provider कार्यान्वयन javax.ws.rs.core.eature के कार्यान्वयन से अलग कैसे हैं। init param (jersey.config.server.provider.classnames) web.xml में इंजेक्ट किया गया है? आदेश को कैसे नियंत्रित किया जाता है?
एंडी डफ्रेसने

JAX-RS विनिर्देशन के नवीनतम संस्करण पर ध्यान दें (संस्करण 2.1 अंतिम रिलीज़ 13 जुलाई, 2017) download.oracle.com/otn-pub/jcp/jaxrs-2_1-final-spec/…
burntsugar

13

@Provider एनोटेशन कुछ भी करने के लिए ब्याज की है कि के लिए प्रयोग किया जाता है JAX-RS क्रम जैसे, MessageBodyReader और MessageBodyWriter । HTTP अनुरोधों के लिए, संदेशबॉडी राइडर का उपयोग एक HTTP अनुरोध इकाई निकाय को विधि मापदंडों पर मैप करने के लिए किया जाता है। प्रतिसाद पक्ष पर, एक MessageBodyWriter का उपयोग करके एक HTTP प्रतिसाद निकाय में एक वापसी मान मैप किया जाता है। यदि एप्लिकेशन को अतिरिक्त मेटाडेटा, जैसे HTTP हेडर या एक अलग स्थिति कोड की आपूर्ति करने की आवश्यकता होती है, तो एक विधि एक रिस्पांस को वापस कर सकती है जो इकाई को लपेटता है और जिसे रिस्पांस का उपयोग करके बनाया जा सकता है। प्रतिक्रिया

@Provider एनोटेशन आपको कच्चे XML स्तर पर इनकमिंग और आउटगोइंग संदेशों की जांच करने की क्षमता देता है, और इस तरह प्रदाता क्लाइंट पर डिस्पैच का प्रतिपक्ष होता है।


6

फ़िल्टरिंग-रिक्वेस्ट / रिस्पांस, एक्सेप्शन हैंडलिंग जैसी कुछ गतिविधियों को करने के लिए, JAX-RS का अपना डिफ़ॉल्ट कार्यान्वयन तर्क है। हालांकि, यह उपयोगकर्ताओं को प्रदाता को स्वयं के कार्यान्वयन के लिए भी अनुमति देता है।

अपना स्वयं का कार्यान्वयन प्रदान करने के लिए हमें @Provider एनोटेशन के साथ निर्दिष्ट करके उपयुक्त वर्गों को लागू करने की आवश्यकता है।

JAX-RS, @Provider एनोटेशन के लिए खोज कर ऐसे किसी भी उपयोगकर्ता-परिभाषित कार्यान्वयन की मौजूदगी का पता लगाने के लिए स्कैनिंग करेगा।

उदाहरण के लिए:

...
@Provider
public class AppExceptionMapper implements ExceptionMapper<Throwable> {
...

...
@Provider
@PreMatching
public class RESTRequestResponseFilter implements ContainerRequestFilter, ContainerResponseFilter {
...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.