יום שלישי, דצמבר 06, 2011

למה אתה משתמש ב WSDL ?!

היום בשעה טובה ומצלחת הבנתי למה הקוד שעובד לפי ה wsdl לא עובד:
פשוט השרת שעובד עם ה wsdl לא מתייחס לפי מה יש ב wsdl אלה רק למידע שהוא רוצה (וגם מניח שהשאר עושים זאת) :

המבנה :

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="CALENDAR">
        <xsd:complexType>
            <xsd:sequence>
            <xsd:element name="SID" type="xsd:int" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="COURSE_ID" type="xsd:int" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="STARTDATE" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="ENDDATE" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>


ע"פ ההגדרה המבנה הוא :

[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]

אבל לא האיש שכתב את השרת החליט שהמידע צריך להתקבל בצורה :
DD/MM/CCYY

נשאלת השאלה : למה אתה מגדיר מבנה נתונים שהוא לא נכון.
אם מעבירים את המידע בצורה לפי ההגדרה אנו מקבלים ... נכון: unhandeled soap exception

ממשיכים הלאה יש תשובה שמשתמשת בשם שנותן הרגשה שמדובר בזמן :


<xsd:element name="STARTTIME" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="ENDTIME" type="xsd:string" minOccurs="1" maxOccurs="1"/> 

ונחשו איזה מידע אני מקבל ?

<STARTTIME>1/1/1900 8:00:00 AM</STARTTIME>
<ENDTIME>1/1/1900 11:00:00 AM    </ENDTIME>

השאלה הראשונה שנשאלת למה יש תאריך (אם לשדה קוראים time) . השאלה השנייה למה יש רווחים בסוף enddate.
מה שעשיתי בסוף זה אוטמט שיודע לזהות מבני הצגת תאריך וזורק את כל ה whitespaces

בדוגמה הזאת רואים סיבה מצויינת למה אנו נאלצים לעבור ולעבד את המידע שנוצר מ   gsoap / wsdl2javakdoap ולעבור בצורה ידנית על כל פונקציה ולהתאים לאנשי ה .NET

השיטה שמצאתי כמתאימה לזיהוי בעיות כאלה היא שימוש ב curl / telnet (ובאמת תתפללו שאין איזה שהיא מערכת שמחייבת הזדהות לא נורמאלית).

ב curl יש אפשרות לבדוק במה אנחנו תומכים (איזה סוג הזדהות )לדוגמה ב דביאן :

curl 7.21.7 (x86_64-pc-linux-gnu) libcurl/7.21.7 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 libssh2/1.2.8 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

הצעד הבא הוא ווידוא איזה סוג של מכשור יכול להתחבר לדוגאות :

appname/1.2 CFNetwork/485.10.2 Darwin/10.3.1
Zune/4.7
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5


רק לאחר שווידאתם שאפשר באמת לבצע את הפקודה באמצעות curl תתחילו לכתוב קוד (זה יחסוך לכם הרבה מאוד כאב ראש לאחר מכן).

אין תגובות:

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