2012-02-12 13 views
9

मैं Sun SAAJ के अलावा वैकल्पिक SOAP (javax.xml.soap) कार्यान्वयन की तलाश में हूं। इसका कारण यह है कि मैं आईबीएम जेडीके 5 संचालित टॉमकैट एएस पर जेएक्स-डब्लूएस वेब सेवा को तैनात करना चाहता हूं, लेकिन यह ज्ञात समस्या है कि सूर्य साज कार्यान्वयन पुनर्नवीनीकरण जेर्सेस कक्षाओं पर निर्भर करता है (Ref Impl does not work with IBM JDK और SAAJ test cases no longer work with IBM's SDK देखें) और इसके लिए एकमात्र तरीकासूर्य के लिए वैकल्पिक SAAJ SOAP कार्यान्वयन

<profiles> 
    <profile> 
     <id>pre-jdk5-profile</id> 

     <activation> 
      <jdk>(,1.4]</jdk> 
     </activation> 

     <dependencies> 
      <dependency> 
       <groupId>com.sun.xml.parsers</groupId> 
       <artifactId>jaxp-ri</artifactId> 
       <scope>runtime</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

मैं इस प्रोफाइल ड्रॉप करने और केवल एक ही है कि हर जगह काम करता है के साथ सोप कार्यान्वयन की जगह चाहते हैं: com.sun.xml.parsers:jaxp-ri की तरह खींचने के लिए एक कस्टम Maven प्रोफ़ाइल का उपयोग करने के लिए है।

मुझे लगता है कि विक्रेता सोप कार्यान्वयन Apache Axis/Apache CXF या JBoss के रूप में (जो आईबीएम SOAP4J पर आधारित है) के साथ आ सकता है - मेरी प्राथमिकताओं के आधार पर जानकारी प्रदान करें:

  • कार्यान्वयन से अलग करने के लिए आसान होना चाहिए बाकी कर्मचारी (अधिमानतः एक हल्के भारित जार)।
  • कार्यान्वयन SOAP messages with attachments का समर्थन करना चाहिए।
  • कार्यान्वयन जावा 5 बाइटकोड संगत होना चाहिए।
  • यदि मैवेन सेंट्रल में कार्यान्वयन उपलब्ध है, तो यह एक प्लस है।

संदर्भ:

उत्तर

6

आसपास ब्राउज़ करने के बाद मैं समस्या का निम्नलिखित संभावित समाधान आया हूं। मैंने का उपयोग करके javax.xml.soap.MessageFactory के वंशज क्या खोजे हैं। org.apache.axis2:axis2-saaj:1.6.1 में

  • org.apache.axis2.saaj.MessageFactoryImpl:

    अलावा मानक com.sun.xml.messaging.saaj.soap.MessageFactoryImpl से, मैं (के रूप में माना जाता) मिल गया है। यह जेएआर सही ढंग से META-INF\services\javax.xml.soap.MessageFactory और META-INF\services\javax.xml.soap.MetaFactory के माध्यम से कारखानों की घोषणा करता है, इसलिए कोई अन्य ट्यूनिंग की आवश्यकता नहीं है। यह संस्करण (मेवेन सेंट्रल के अनुसार) 2011 में जारी किया गया था, कुछ निर्भरताओं, अनुशंसित।

  • org.jboss.ws.core.soap.MessageFactoryImplorg.jboss.ws.native:jbossws-native-core:3.2.1.Beta2 में जेबॉस 3.x से। ऐसा लगता है कि पुराने होने की संभावना है और शायद जेबॉस अब इसके विकास का समर्थन नहीं कर रहा है क्योंकि मैं इस जार को मैवेन सेंट्रल (here) के बाहर ढूंढने में सक्षम था। बहुत निर्भरता, 1.8 एम आकार, अनुशंसित नहीं है।
  • org.apache.openejb.server.webservices.saaj.MessageFactoryImplorg.apache.openejb:openejb-webservices:4.0.0-beta-2 और org.apache.geronimo.webservices.saaj.GeronimoMessageFactoryorg.apache.geronimo.modules:geronimo-webservices:3.0-M1 में। हकीकत में इन कारखानों में से एक एक्सिस 2 या सूर्य कार्यान्वयन के लिए एक रैपर/रनटाइम_लोकेटर है (SaajFactoryFinder और SAAJFactoryFinder देखें)। विचार नहीं किया जाना चाहिए।

नीचे पंक्ति: केवल स्वीकार्य विकल्प एक्सिस 2 कार्यान्वयन है।

+0

यह काम कर सकता है। यदि आपको एक्सिस 2 के साथ सफलता नहीं मिली है तो आप स्प्रिंग डब्ल्यूएस का उपयोग कर देख सकते हैं जिसे जेडीके पर 1.4 से ऊपर काम करना चाहिए। – TechTrip

+1

(दुर्भाग्य से) [वसंत-ws-parent-2.0.4.RELEASE.pom] से (http://mirrors.ibiblio.org/pub/mirrors/maven2/org/springframework/ws/spring-ws-parent/2.0 .4.RELEASE/वसंत-WS-अभिभावक 2.0.4.RELEASE.pom): ' com.sun.xml.messaging.saaj Saaj-impl 1.3.2' जो एक संकेत है कि शायद स्प्रिंग-डब्ल्यूएस सूर्य साज का उपयोग करता है और वे किसी भी तरह से एक ही समस्या का समाधान करते हैं। –

+0

हाँ, मेरे बुरे, uggh। – TechTrip

0

हालांकि मैं अपने सटीक सवाल का जवाब पता नहीं है, मैं एक समाधान है कि कैसे आप सूर्य कर सकते हैं साज (और जेएक्स-डब्ल्यूएस आरआई) जेआरई 1.5 के तहत काम करते हैं। जावा 5 के तहत जेएक्स-डब्ल्यूएस आरआई चलाने में परेशानी क्यों है, वास्तव में पुराना जेएक्सपी है (जावा 1.5 जेएक्सपी 1.3 के साथ आता है, जबकि जेएक्स-डब्ल्यूएस आरआई को जेएक्सपी 1.4 की आवश्यकता होती है), और क्योंकि जेएक्स-डब्ल्यूएस आरआई को उपयोग करने के लिए हार्ड कोड किया गया है सूर्य जैक्सपी आरआई (com.sun.org.apache ...)। चूंकि जेएक्सपी 1.3 जेआरई का हिस्सा है, इसलिए आप इसे आसानी से प्रतिस्थापित नहीं कर सकते हैं (आप कार्यान्वयन को प्रतिस्थापित कर सकते हैं, लेकिन एपीआई नहीं)। समाधान एक्टिव्सएप का xerces पोर्ट है, जो एक कट-डाउन जेएक्सपी 1.4 संस्करण है जो सूर्य जैक्सपी आरआई पैकेज नामकरण (com.sun.org.apache।) का उपयोग करता है। आप Maven रेपो में पा सकते हैं:

<dependency> 
    <groupId>activesoap</groupId> 
    <artifactId>jaxb-xercesImpl</artifactId> 
    <version>1.5</version> 
</dependency> 

अजीब पैकेज नामकरण कोई आपत्ति नहीं है - बस कोशिश करते हैं।

इस बार सब है कि जावा 5.

के तहत (यह के भाग के रूप और Saaj) सूर्य JAX-WS आरआई को चलाने के लिए मत भूलना नहीं किसी भी JAXP एपीआई जार शामिल करने के लिए आवश्यक है है। वे जावा 5 जेएक्सपी एपीआई के साथ संघर्ष करेंगे।

+0

** rustyx **, आपके प्रयासों के लिए धन्यवाद, लेकिन आपका उत्तर गलत दिशा में जाता है। जिस प्रोफ़ाइल का मैंने उल्लेख किया है वह वही करता है जो आप सुझाव देते हैं: यदि सूर्य जेर्सेस कार्यान्वयन को खींचता है और इस प्रकार समस्या को हल करता है 1.5 –

+0

1) हमेशा जैक्सप जार क्यों नहीं शामिल करते? 2) क्या आप वाकई एक अन्य जेएक्स-डब्ल्यूएस स्टैक पर जाने के बिना साज को स्वैप कर सकते हैं ?? – rustyx

+0

1) आपके क्लासपाथ में कई ज़ीरस अच्छे नहीं हैं और उन समस्याओं का कारण बन सकते हैं जो ट्रेस करना मुश्किल है, क्योंकि कुछ पल में मुझे नहीं पता कि ज़ीरिस का उपयोग किस प्रकार किया जाता है। 2) मुझे नहीं पता। यदि यह संभव नहीं है तो मुझे उम्मीद है कि समुदाय ऐसा कहेंगे। दूसरी ओर मुझे 'javax.xml.soap' में कोई अन्य कार्यान्वयन नहीं है। मुझे किसी अन्य ढेर पर स्विच करने के लिए मजबूर क्यों होना चाहिए? –

0

कठिन एक। शायद अपाचे सीएक्सएफ रिलीज में से एक को देखें। http://cxf.apache.org/

आप क्लासलोडर को फ़्लिप करने का प्रयास कर सकते हैं, जारों को बंडल कर सकते हैं जिन्हें आपको अपने वेब ऐप के साथ जरूरी है और एक PARENT_LAST मॉडल में लोड हो रहा है। यह शायद आपकी सबसे अच्छी शर्त है।

टोमकैट में एक तीसरा विकल्प जावा में समर्थित एंडोर्डेड मानक ओवरराइड तंत्र हो सकता है, और टॉमकैट।-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS

यहां देखें, मुझे लगता है कि यह टॉमकैट के पुराने संस्करणों पर लागू होता है: http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html#XML_Parsers_and_Java

+1

मुझे पता है कि SAAJ कार्यान्वयन सीएक्सएफ में होना चाहिए, लेकिन इसका उपयोग कैसे करें? क्या जार का उपयोग करने के लिए? (ठीक है, उन्हें 'अनुमोदित' में रखने की कोई आवश्यकता नहीं है क्योंकि मैं आईबीएम जेडीके का उपयोग करता हूं, जिसे साज के साथ पैक नहीं किया जाता है)। –

+0

यह कुछ सालों से रहा है लेकिन मुझे वेबस्पेयर पर कुछ ऐसा करना पड़ा। क्लासलोडर को आखिरी बार माता-पिता को फिसल गया और मुझे अपनी वेब सेवा से विवादित कुछ कोर जार शामिल करना पड़ा। मैं उन सटीक जारों को याद नहीं कर सकता जिन्हें मुझे शामिल करना था। मैंने जैक्सप रनटाइम के साथ शुरुआत की और उन्मूलन की प्रक्रिया में वापस भागना पड़ा। – TechTrip

+0

मुझे लगता है, मुझे अपने सिद्धांत की मंजूरी मिली है :) मेरा जवाब जांचें। –

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