יום שני, מרץ 11, 2013

טיפוס מוררכב שיוצר ב wsdl2h לא מכיל namespace

לפני מספר ימים פנה אליי עמית לעבודה עם תופעה מוזרה בקבצים שיוצרו באמצעות gSOAP.

הבעיה הייתה שטיפוסים מורכבים (ComplexType) בהודעות לא הכילו את מרחב השמות (namespace) ברירת המחדל של הרכיב.

הפעולה התבצעה ע"י wsdl2h -c filename.wsdl

במקום לקבל :

<SOAP-ENV:Body>
  <ns1:typename>
    <fieldname>
      <ns2:typename1>text value</ns2:typename1>
      <ns2:typename2>true</ns2:typename2>
      <ns2:typename3>6308880000</ns2:typename3>
    </fieldname>
  </ns1:typename>
</SOAP-ENV:Body>

התקבל:


<SOAP-ENV:Body>
  <ns1:typename>
    <ns1:fieldname>
      <ns2:typename1>text value</ns2:typename1>
      <ns2:typename2>true</ns2:typename2>
      <ns2:typename3>6308880000</ns2:typename3>
    </ns1:fieldname>
  </ns1:typename>
</SOAP-ENV:Body>

הפתרון לבעיה פשוט - יש להכריז כי מרחב השמות ברירת המחדל יהיה qualified (תמיד יכיל את מרחב השמות).
פעולה זה מתבצעת ע"י שינוי בקובץ ההכרזה :

#define SOAP_NAMESPACE_OF_ns1   "http://myrtfm.blogspot.com/soap/ServiceName"
//gsoap ns1   schema namespace: http://myrtfm.blogspot.com/soap/ServiceName
//gsoap ns1   schema form:      unqualified
ל:
#define SOAP_NAMESPACE_OF_ns1   "http://myrtfm.blogspot.com/soap/ServiceName"
//gsoap ns1   schema namespace: http://myrtfm.blogspot.com/soap/ServiceName
//gsoap ns1   schema form:      qualified



נ.ב. קובץ הסכמה הגדיר את מרחב שמות המרחב כראוי :

 elementFormDefault="qualified"

אין תגובות:

הוסף רשומת תגובה