2014-05-08 1 views
1

Quelle est la manière la plus simple (ou quelconque) de déterminer si un argument spécifique pour un appel de savon est facultatif/requis? J'utilise actuellement SoapClient (en mode WSDL) pour créer une fonctionnalité similaire à SoapUI. La seule chose dont j'ai besoin à ce stade est de trouver des paramètres optionnels et obligatoires.SoapClient: détection des arguments facultatifs/requis?

Répondre

1

Si vous vérifiez le fichier WSDL pour votre service Web, vous pouvez voir le schéma de demande. L'option/required dépend des attributs minOccurs et maxOccurs sur les éléments de cette xsd. Par défaut, minOccurs et maxOccurs sur <xsd:element>, <xsd:sequence>, <xsd:all>, <xsd:choice> ... sont 1, donc tous les éléments sont requis par défaut. S'il y a des éléments qui ont un attribut minOccurs = "0", alors ces éléments seront optionnels.

i.e. vous avez cette xsd:

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="shiporder"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="orderperson" type="xs:string"/> 
     <xs:element name="shipto"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="address" type="xs:string"/> 
      <xs:element name="city" type="xs:string" minOccurs="0"/> 
      <xs:element name="country" type="xs:string" minOccurs="0"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="item"> 
     <xs:complexType> 
      <xs:sequence minOccurs="0"> 
      <xs:element name="title" type="xs:string"/> 
      <xs:element name="note" type="xs:string" minOccurs="0"/> 
      <xs:element name="quantity" type="xs:positiveInteger"/> 
      <xs:element name="price" type="xs:decimal"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Dans le xsd au-dessus des <city> et <country> éléments dans l'ordre <shipto> sont facultatifs. La séquence <item> est également facultative, et si <item> apparaît, le <note> dans cette séquence est également facultatif. Le reste est requis.

J'espère que cela aide,

+0

Ouais c'est comme ça que j'ai fini par le faire. Naturellement pas un seul WSDL qui n'utilise pas de XML dépendants pour définir les types, donc j'ai fini par "emprunter" du code à partir de [https://github.com/staabm/soap-client-generator/blob/master/WSDLInterpreter.php # L164] pour inclure tous les imports/includes/wsdl. Tes réponses sont parfaitement claires et auraient résolu le problème pour moi si j'étais encore coincé, alors merci pour l'effort :) – Blizz

+0

Donc je suis en retard ... en tout cas merci pour l'acceptation :). – albciff

+0

En retard pour moi, mais je l'espère très opportun pour tout le monde avec la même question :) – Blizz