मैं क्लाइंट को लागू करने के लिए पायथन/सूड का उपयोग करता हूं और मुझे wsdl में element ref=
द्वारा परिभाषित पैरामीटर के नमूने प्रकार के लिए भेजे गए SOAP शीर्षलेख में गलत नेमस्पेस उपसर्ग प्राप्त होता है।पायथन एसओएपी अनुरोध में गलत नामस्थान उपसर्ग
.wsdl डेटा प्रकार .xsd फ़ाइल का संदर्भ दे रहा है, नीचे देखें। यह मुद्दा GetRecordAttributes
फ़ंक्शन और gbt:recordReferences
प्रकार का पहला तर्क है।
फ़ाइल: browse2.wsdl
<xsd:schema targetNamespace="http://www.grantadesign.com/10/10/Browse" xmlns="http://www.grantadesign.com/10/10/Browse" xmlns:gbt="http://www.grantadesign.com/10/10/GrantaBaseTypes" elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:import schemaLocation="grantabasetypes2.xsd" namespace="http://www.grantadesign.com/10/10/GrantaBaseTypes"/>
<xsd:element name="GetRecordAttributes">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="gbt:recordReferences">
</xsd:element>
संदर्भित फ़ाइल: grantabasetypes2.xsd
<element name="recordReferences">
<complexType>
<sequence>
<element name="record" minOccurs="0" maxOccurs="unbounded" type="gbt:MIRecordReference"/>
</sequence>
</complexType>
</element>
सोप अनुरोध झाग द्वारा भेजे गए:
<SOAP-ENV:Envelope xmlns:ns0="http://www.grantadesign.com/10/10/GrantaBaseTypes" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://www.grantadesign.com/10/10/Browse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns2:GetRecordAttributes>
<ns2:recordReferences>
<ns0:record>
</ns0:record>
</ns2:recordReferences>
</ns2:GetRecordAttributes>
</ns1:Body>
</SOAP-ENV:Envelope>
समस्या: <ns2:recordReferences>
में गलत उपसर्ग है, <ns0:recordReferences>
होना चाहिए क्योंकि यह .xsd में परिभाषित नामस्थान ...GrantaBaseTypes
से संबंधित है।
यह wsdl में ref=
द्वारा परिभाषित सभी तर्कों के लिए होता है। यह स्वचालित रूप से कैसे ठीक किया जा सकता है?
नोट: मैंने जांच की है कि "अच्छा" उपसर्ग सेवा द्वारा मैन्युअल एसओएपी अनुरोध मैन्युअल रूप से कर्ल के माध्यम से भेजकर स्वीकार किया जाता है।
अद्यतन
मैं साबुन का झाग स्रोत कोड के साथ meddled और ref=
विशेषता के साथ सभी तत्वों को निम्नलिखित अनुभवजन्य ठीक बलों रेफरी एड नाम स्थान ग्रहण करने के लिए (पहले, वे स्कीमा जड़ नाम स्थान पर ले या जो कुछ भी tns
है) :
फ़ाइल: /suds/xsd/sxbase.py मेरी सेवा के साथ
class SchemaObject(object):
....
def namespace(self, prefix=None):
ns = self.schema.tns
#FIX BEGIN
if self.ref and self.ref in self.schema.elements.keys():
ns = self.ref
#FIX END
काम करता है, लेकिन मुझे यकीन है कि अगर यह दूसरी बात निकाल लेंगे नहीं कर रहा हूँ रों। मैं एक बेहतर समाधान पसंद करूंगा जो एसयूडीएस स्रोत कोड नहीं बदलेगा।
धन्यवाद,
एलेक्स
पसंद करते हैं यह स्पष्ट रूप से अपने ढेर में एक बग है; "स्वचालित रूप से" से आपका क्या मतलब है? उदाहरण के लिए, क्या आप एक अलग, लेकिन समकक्ष एक्सएसडी के साथ काम करने के इच्छुक हैं जो आपके टूलींग के साथ काम करेगा? आप जो कहते हैं उससे, यदि आप स्थानीय रूप से परिभाषित तत्व के साथ रेफरी को प्रतिस्थापित करेंगे, तो यह काम करेगा; सभी एक्सएसडी परवाह करने के लिए, जेनरेट एक्सएमएल वही होगा। यदि आप उड़ान पर बदलने के बारे में सोचते हैं, जैसे किसी प्रॉक्सी के माध्यम से एक्सएसएलटी के किसी प्रकार का उपयोग करना, यह एक अलग दृष्टिकोण होगा। मैं ऐसे समाधान की अनुशंसा कर सकता हूं जो स्थानीय तत्वों के साथ रेफरी को प्रतिस्थापित करने के लिए स्वचालित रूप से आपके एक्सएसडी को दोबारा कर देगा। –
मैंने वास्तव में परिभाषाओं को बदलने और बदलने की कोशिश की, लेकिन चूंकि मैं एक विशेषज्ञ नहीं हूं, इसलिए मैंने सही वाक्यविन्यास को इंगित नहीं किया है, एसयूडीएस ने गलत नामस्थान रखा है। मैं इनके साथ नहीं रहना पसंद करूंगा, क्योंकि वे बाहरी विक्रेता द्वारा प्रदान किए जाते हैं और परिवर्तनों के अधीन होते हैं। अब तक मिले एक गैर-इष्टतम समाधान के लिए अद्यतन देखें। –