2011-10-14 6 views
18

हमारे पास जेएक्स-डब्ल्यूएस और SOAPHandler में लागू वेब सेवाओं का एक सेट है जो एसओएपी शीर्षकों में नियंत्रण विशेषताओं को जोड़ता है। आज, हमें आपके द्वारा बनाई गई हर नई सेवा में @HandlerChain एनोटेशन जोड़ने की आवश्यकता है।एक वैश्विक जेएक्स-डब्ल्यूएस संदेश कैसे परिभाषित करें हैंडलर जो पारदर्शी तरीके से सभी सेवाओं को रोकता है?

विचार यह है कि नई सेवाओं के कार्यान्वयनकर्ताओं को यह जानने की आवश्यकता नहीं है कि @HandlerChain मौजूद है।

क्या वैश्विक Handler को कॉन्फ़िगर करने का कोई तरीका है जो मेरे WAR में चल रही सभी सेवाओं को रोकता है?

+1

एक इनाम शायद कुछ उत्तर दिखाई देगा शुरू कर दिया। –

+0

क्या आपके पास अपने युद्ध में हैंडलर है? या आप इसे युद्धों में चाहते हैं या? मैं बस अपनी कार्यक्षमता सोच रहा हूँ। मेरे विचार हालांकि हैंडलर को इंटरफ़ेस पर क्यों नहीं रखा गया है कि आपका वेब सेवा इंटरफ़ेस विस्तारित करता है (या आपकी सेवा विस्तारित सार तत्व पर)? –

+0

क्रिस, कोड डुप्लिकेशंस से बचने के लिए, वार्स में हैंडलर कार्यक्षमता साझा करना है। तो, मुख्य लक्ष्य (लेकिन हम नहीं जानते कि यह संभव है या नहीं) इस हैंडलर को एक जार में वितरित करना है, जिसे प्रत्येक युद्ध के वेब-आईएनएफ/lib dir या शायद अंतिम ईएआर में जोड़ा जाना चाहिए। –

उत्तर

0

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

+0

जोओ, केवल '@ हैंडलर चेन' के साथ एनोटेटेड एक अमूर्त वर्ग को परिभाषित नहीं करता है। हैंडलर नहीं कहा जाता है। यदि मैं अमूर्त वर्ग को '@ हैंडलर चेन' और '@ वेबसाइट सेवा' दोनों के साथ एनोटेट करता हूं, तो एक तैनाती त्रुटि होती है, यह कहकर कि मेरा 'FooService' वर्ग जो सार को विस्तारित करता है उसे 'javax.servlet.Servlet' पर नहीं डाला जा सकता है। –

+0

मैं नहीं देख सकता कि रनटाइम पर कितना लचीला या प्रत्येक वेब सेवा वर्ग को '@ हैंडलर चेन 'के साथ एनोटेट करने से कम जोड़ा गया है। –

+0

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

1

मैं वेब सेवा फैक्टरी बीन के रूप में वसंत का उपयोग करें और परिभाषित माता पिता सेम निम्नलिखित:

<bean id="parentWebService" abstract="true" class="org.jvnet.jax_ws_commons.spring.SpringService"> 
     <property name="handlers"> 
      <list> 
       <bean class="com.tosan.sipa.framework.webservice.handler.AuthenticationHandler"/> 
      </list> 
     </property> 
    </bean> 

और में नई सेवा को परिभाषित नई सेवा की हम केवल सेट जनक "parentWebService"

1

यह हो नहीं चाहेंगे करने के लिए web.xml में फ़िल्टर का उपयोग करने के लिए बस आसान है? urlrewiter की तरह थोड़ा सा करता है।

+0

क्या आप कृपया अपना उत्तर विस्तृत कर सकते हैं? – MaVRoSCy

+1

कोई अच्छा जवाब नहीं है। –

1

एक विकल्प जो काम कर सकता है aspectj है। बाइटकोड बुनाई (या वसंत के साथ संयोजन में यदि आप चाहें) के साथ आप एक ही हैंडलर को एक पहलू के रूप में बना सकते हैं और सभी वर्गों (और WAR फ़ाइलों को भी) में बुनाई कर सकते हैं। मैंने यह कोशिश नहीं की है मुझे लगता है कि एकमात्र चुनौती पहलू से एसओएपी शीर्षलेख पर एक संभाल लेगी।

0

कम से कम जेबॉस एएस और वाइल्डफ्लाई के साथ आप एंडपॉइंट कॉन्फ़िगरेशन में प्री-और पोस्ट-हैंडलर चेन कॉन्फ़िगर कर सकते हैं। जैसे Wildfly 8.1.0.Final के standalone.xml डिफ़ॉल्ट रूप से कॉन्फ़िगर किया गया निम्नलिखित है:

<subsystem xmlns="urn:jboss:domain:webservices:1.2"> 
    <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host> 
    <endpoint-config name="Standard-Endpoint-Config"/> 
    <endpoint-config name="Recording-Endpoint-Config"> 
     <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM"> 
      <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/> 
     </pre-handler-chain> 
    </endpoint-config> 
    <client-config name="Standard-Client-Config"/> 
</subsystem> 

Predefined client and endpoint configurations

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