यहां सूचीबद्ध उत्तर जो आपको उपयोग करने के लिए मार्गदर्शन करते SOAPHandler
हैं, पूरी तरह से सही हैं। उस दृष्टिकोण का लाभ यह है कि यह किसी भी JAX-WS कार्यान्वयन के साथ काम करेगा, क्योंकि SOAPHandler JAX-WS विनिर्देशन का हिस्सा है। हालाँकि, SOAPHandler के साथ समस्या यह है कि यह पूरी तरह से मेमोरी में पूरे XML संदेश का प्रतिनिधित्व करने का प्रयास करता है। इससे विशाल मेमोरी उपयोग हो सकता है। JAX-WS के विभिन्न कार्यान्वयनों ने इसके लिए अपने स्वयं के वर्कआर्ड को जोड़ा है। यदि आप बड़े अनुरोधों या बड़ी प्रतिक्रियाओं के साथ काम करते हैं, तो आपको मालिकाना दृष्टिकोणों में से एक पर गौर करने की आवश्यकता है।
चूँकि आप "JDK 1.5 या बेहतर में शामिल एक" के बारे में पूछते हैं, इसलिए मैं JAX-WS RI (उर्फ मेट्रो) के रूप में जो औपचारिक रूप से जाना जाता है, के संबंध में जवाब दूंगा जो कि JDK के साथ शामिल है।
JAX-WS RI के पास इसके लिए एक विशिष्ट समाधान है जो स्मृति उपयोग के मामले में बहुत कुशल है।
Https://javaee.github.io/metro/doc/user-guide/ch02.html#efficient-handlers-in-jax-ws-ri देखें । दुर्भाग्य से वह लिंक अब टूट गया है लेकिन आप इसे वेकबैक मशीन पर पा सकते हैं। मैं नीचे हाइलाइट्स दूंगा:
2007 में मेट्रो के लोगों ने एक अतिरिक्त हैंडलर प्रकार पेश कियाMessageHandler<MessageHandlerContext>
, जो मेट्रो का मालिकाना हक है। यह कहीं अधिक कुशल है SOAPHandler<SOAPMessageContext>
क्योंकि यह इन-मेमोरी डोम प्रतिनिधित्व करने की कोशिश नहीं करता है।
यहाँ मूल ब्लॉग लेख से महत्वपूर्ण पाठ है:
MessageHandler:
JAX-WS विशिष्टता और RI में बेहतर संदेश अमूर्त द्वारा प्रदान किए गए एक्स्टेंसिबल हैंडलर ढांचे का उपयोग करते हुए, हमने MessageHandler
आपके वेब सेवा अनुप्रयोगों का विस्तार करने के लिए एक नया हैंडलर बुलाया । MessageHandler SOAPHandler के समान है, सिवाय इसके कि इसके कार्यान्वयन को पहुँच प्राप्त होती हैMessageHandlerContext
(MessageContext का विस्तार)। MessageHandlerContext के माध्यम से कोई भी संदेश तक पहुंच सकता है और संदेश एपीआई का उपयोग करके इसे संसाधित कर सकता है। जैसा कि मैंने ब्लॉग के शीर्षक में रखा है, यह हैंडलर आपको संदेश पर काम करने देता है, जो संदेश को केवल DOM आधारित संदेश ही नहीं बल्कि एक्सेस / प्रोसेस करने के लिए कुशल तरीके प्रदान करता है। हैंडलर का प्रोग्रामिंग मॉडल समान है और संदेश हैंडलर मानक लॉजिकल और सोप हैंडलर के साथ मिलाया जा सकता है। मैंने JAX-WS RI 2.1.3 में एक नमूना जोड़ा है जो संदेश लॉग करने के लिए MessageHandler का उपयोग दिखा रहा है और यहाँ नमूने से एक स्निपेट है:
public class LoggingHandler implements MessageHandler<MessageHandlerContext> {
public boolean handleMessage(MessageHandlerContext mhc) {
Message m = mhc.getMessage().copy();
XMLStreamWriter writer = XMLStreamWriterFactory.create(System.out);
try {
m.writeTo(writer);
} catch (XMLStreamException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean handleFault(MessageHandlerContext mhc) {
.....
return true;
}
public void close(MessageContext messageContext) { }
public Set getHeaders() {
return null;
}
}
(2007 ब्लॉग पोस्ट से अंतिम उद्धरण)
LoggingHandler
उदाहरण के लिए, अपने कस्टम हैंडलर को कहने की आवश्यकता नहीं है, किसी भी प्रभाव के लिए आपके हैंडलर चेन में शामिल होने की आवश्यकता है। यह किसी भी अन्य को जोड़ने के समान है Handler
, इसलिए आप इस पृष्ठ पर अन्य उत्तरों में देख सकते हैं कि यह कैसे करना है।
आप मेट्रो गिटहब रेपो में एक पूर्ण उदाहरण पा सकते हैं ।