سؤال

انا استخدم PHP 5.2.10 وأنا أحاول استهلاك خدمة ويب تعود أنواع البيانات المعقدة باستخدام امتداد الصابون القياسي.

المشكلة هي أن الصابون لا يملأ الكائنات التي يتم تداخلها في كائنات / صفيف من الكائنات. مثال مبسط على ما أحصل عليه عندما أسمي طريقة gootutente ، مع تحديد "my_unique_id" كمعلمة هو:

stdClass Object
(
    [getUtenteReturn] => stdClass Object
        (
            [userName] => my_unique_id
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

الجزء ذي الصلة من وصف WDSL هو:

<element name="getUtenteResponse">
  <complexType>
    <sequence>
      <element name="getUtenteReturn" type="tns1:Cliente"/>
    </sequence>
  </complexType>
</element>
...
<complexType name="Utilizzatore">
  <sequence>
    <element name="userName" nillable="true" type="xsd:string"/>
  </sequence>
</complexType>
...
<complexType name="Cliente">
  <complexContent>
    <extension base="tns1:Utilizzatore">
      <sequence> 
        <element name="fieldOne" nillable="true" type="xsd:string"/>
        <element name="fieldTwo" nillable="true" type="xsd:string"/>
        <element name="utilizzatore" nillable="true" type="impl:ArrayOf_tns1_Utilizzatore"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

ما وجدته أنا لست الوحيد الذي يواجه هذه المشكلة. على وجه الخصوص وجدت هذا التعليق في الوثائق الرسمية PHP و هذا إدخال المنتدى الآخر لإعطاء فكرتين مختلفتين حول كيفية التعامل مع المشكلة ، لكنني لم أتمكن من تحويل أي من هذين الاثنين الأفكار الى حل العمل: يبدو أنني لا أفهم تمامًا المنطق وراء الأمثلة المقدمة.

سأكون ممتنًا إذا كان بإمكان أي شخص أن يرشدني في هذا: سيكون بعض كود العمل على خدمة ويب أخرى موضع ترحيب ، لكن ما أنا عليه في المقام الأول هو فهم المشكلة ومنطق الحلول المقترحة (The Fish Lane ، وليس الأسماك!) . قون

هل كانت مفيدة؟

المحلول

سؤال قديم ، لا إجابة. لقد تعثرت مؤخرًا في هذا المنشور ، وهذا ما يفسر المشكلة ويعطي حلاً: استهلاك SOAP ComplexType WebService مع PHP.

نصائح أخرى

إليكم أفكاري المباشرة ، آسف أن هذه ليست إجابة مناسبة ، فقط بعض الأفكار ...

أولاً ، هل حاولت مشاهدة طلب SOAP (المغلف) المرسلة إلى خادم الصابون؟ هل يبدو أنه يجب أن يعمل؟ هل يمكنك أن ترى إلى أين يحدث خطأ؟ هل تحصل فقط على خطأ ، أو Soapfault ، أو البيانات الخاطئة ، أو لا شيء على الإطلاق؟

ثانياً ، هل حاولت استخدام SoapParam صف دراسي؟

أخيرًا ، أنا متأكد من أنك تقوم بذلك بشكل صحيح ، لكنني لاحظت أن الكائن الذي تقوم ببنائه يحتوي على اسم مستخدم و FieldOne و FieldTwo جميعهم جنبًا يظهر في مثالك) بينما يجب أن يكون اسم المستخدم داخل صفيف Utilizzatore ، لذلك لا ينبغي أن يكون الأمر أكثر مثل:

stdClass Object
(
    [Cliente] => stdClass Object
        (
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

إن فصل الصابون أمر محبط للغاية بالنسبة لي ، لذلك لا تأخذ أيًا من هذا النقد ، لأنني آمل فقط أن أفهم ذلك بنفسي بشكل أفضل من خلال تقديم أفكار قد تساعدك.

ماك ، شكرا جزيلا لاستجاباتك السريعة. انظر إلى ما هبطت .. لم أنظر إلى هذا في وقت سابق. وبالتالي تريد المشاركة هذه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top