2012-04-23 17 views
6

का उपयोग कर लिफाफे में साबुन यूआरआई नहीं बदला जा सकता है, लेकिन मैं कर रहा हूँ (प्रतीत होता है) लिफाफे में "साबुन" नाम स्थान के URI को बदलने में असमर्थ।मैं एक ग्राहक से भेजने के लिए एक सरल सोप संदेश बनाने के लिए कोशिश कर रहा हूँ जावा SoapMessage

<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> ... </soap:Envelope> 

तो मैं है निम्नलिखित कोड:

final SOAPMessage sm = MessageFactory.newInstance().createMessage(); 

    final SOAPPart sp = sm.getSOAPPart(); 
    final SOAPEnvelope se = sp.getEnvelope(); 
    final SOAPHeader sh = se.getHeader(); 
    final SOAPBody sb = se.getBody(); 

    se.removeNamespaceDeclaration(se.getPrefix()); 
    se.addNamespaceDeclaration("soap", "http://www.w3.org/2001/12/soap-envelope"); 
    se.setPrefix("soap"); 
    sb.setPrefix("soap"); 
    sh.setPrefix("soap"); 
    se.setEncodingStyle("http://www.w3.org/2001/12/soap-encoding/"); 

हालांकि, जब मैं भेजने से पहले संदेश मुद्रित, निम्नलिखित मेरी लिफाफा है

यह साबुन शीर्ष लेख होना चाहिए कि देखो की तरह है :

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> 

xmlns के यूआरआई में मतभेदों पर ध्यान दें: "होना चाहिए" अनुभाग में साबुन और वास्तविक।

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapy="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> 

मैं इसके साथ कुछ करने के लिए हो सकता है अनुमान लगा रहा हूँ:

अगर मैं "साबुन" "साबुन" के बजाय करने के लिए addNamespaceDeclaration कॉल का पहला तर्क बदलने के लिए, यह निम्नलिखित लिफाफा मैं मिलता है तथ्य यह है कि कॉल कुछ addNamespaceDeclaration बजाय changeNamespaceDeclaration की तरह है, और यह नाम स्थान है पहले से ही मौजूद पर विचार नजरअंदाज कर दिया है, लेकिन मैं कुछ है कि (मैं पहले से ही setAttributeNS की कोशिश की है) काम करता है नहीं मिल रहा।

संपादित करें: मैं बस महसूस किया कि setAttributeNS क्योंकि उस नाम स्थान, यूआरआई नहीं बदल रहा है मूर्ख है। संपादित करें पर दोबारा: मैं थोड़ा भ्रमित कर रहा हूँ, जैसा कि मैंने खोज करने के लिए मैं कभी कभी कि नामकरण soap:"Namespace" चला जाता है देखते हैं, तो उस अर्थ में मैं नाम स्थान बदलना चाहते हैं जारी रखने के लिए ... लेकिन मैंने सोचा कि नाम स्थान "साबुन" हिस्सा था । कोई स्पष्टीकरण?

यह मेरी पहली पोस्ट है इसलिए मैं क्षमा चाहता हूं कि अगर मैं कुछ हल कर रहा हूं जो पहले ही हल हो चुका है, लेकिन मैंने चारों ओर खोज की है और जो कुछ मैंने पाया है वह नामस्थान को बदलने से संबंधित है (जैसे SOAP-ENV , यूआरआई के बजाए साबुन के लिए डिफ़ॉल्ट नामस्थान है। अग्रिम में धन्यवाद।

-M

उत्तर

13

सामान्य तौर पर आप मैन्युअल रूप से सोप नाम स्थान संशोधित करने की जरूरत नहीं होनी चाहिए। आप जो हासिल करना चाहते हैं वह एक एसओएपी 1.2 संदेश बनाना है (जिसमें SOAP 1.1 की तुलना में एक अलग नामस्थान है)।

SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(); 
sm.getSOAPPart().getEnvelope().setPrefix("soap"); 
sm.getSOAPPart().getEnvelope().removeNamespaceDeclaration("env"); 
sm.getSOAPHeader().setPrefix("soap"); 
sm.getSOAPBody().setPrefix("soap"); 
+1

के लिए धन्यवाद: अपने कोड से सभी नाम स्थान फेरबदल लाइनों निकालने का प्रयास करें और

final SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(); 

को पहली पंक्ति को बदलने के मामले में आप वास्तव में जो उपसर्ग कि इस्तेमाल किया जाना चाहिए निर्दिष्ट करने की आवश्यकता है, इस कोड काम करने के लिए लगता है त्वरित जवाब एरिक, हालांकि मैंने कोशिश की है कि लगभग 5 मिनट पोस्ट करने से पहले और देखा कि डिफ़ॉल्ट नाम स्थान "सोप-eNV" (जो मैं "साबुन" करने के लिए बदल गया था) के लिए "env" में बदल गया था: ' \t ... ' मुझे मूल रूप से पोस्ट किए गए मिलान से मेल खाने के लिए वास्तव में लिफाफा की आवश्यकता है - कोई अन्य सुझाव? हो सकता है कि मैं सिर्फ संदेश के निर्माण के लिए के रूप में ऐसा लगता है MessageFactory द्वारा समर्थित प्रोटोकॉल के दोनों बहुत सही नहीं कर रहे हैं की जरूरत है ... – MandM

+1

उपसर्ग (जैसे 'env' या' soap') कोई अर्थ अर्थ नहीं है, यह केवल एक संदर्भ के लिए शॉर्टकट है नामस्थान (जैसे 'http: // www.w3.org/2003/05/साबुन-लिफाफा')। – erikxiv

+0

जानना अच्छा है, हालांकि मुझे विश्वास है कि जिस डिवाइस के साथ मैं संचार कर रहा हूं, उसके लिए यह आवश्यक है कि वे फ़ील्ड अनुरोध में इस तरह हों (मुझे लगता है)। – MandM

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

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