Question

Je construis un service Web en utilisant le framework Zend. J'utilise la classe zend_soap_autodiscover pour la génération de mon WSDL. J'utilise divers types complexes dans ce formulaire de service Web Exemple:

Classe de stockage

class StockItemEntity {
    /** @var string */
    public $sStockCode;
    /** @var string */
    public $sQty;

    public function __construct($sStockCode, $sQty){
        $this->sStockCode = $sStockCode;
        $this->sQty = $sQty;
    }   
}

Définition WSDL

<xsd:complexType name="StockItemEntity">
  <xsd:all>
    <xsd:element name="sStockCode" type="xsd:string" nillable="true"/>
    <xsd:element name="sQty" type="xsd:string" nillable="true"/>
  </xsd:all>
</xsd:complexType>

D'après ce que j'ai compris de la lecture sur le Web, le nillable = "true" est là parce que les propriétés de n'importe quel objet peuvent être définies sur null. Ainsi, le nillable = "true" est nécessaire pour maintenir un document XML valide même si l'objet de stockitivité a toutes ses propriétés définies sur NULL.

Ma préoccupation est que ces deux propriétés doivent toujours être transmises à la méthode Web. Est-il possible de supprimer le "nillable = true" pour forcer les propriétés à ne pas être nulles? Sinon, y a-t-il un moyen de forcer les valeurs non nulles dans ces propriétés. J'espérais éviter d'avoir à les valider du côté du service Web.

Merci

Sincères amitiés

Gabriel

Était-ce utile?

La solution

À un certain stade entre Zend Framework 1.10.7 et 1.11.0, ils ont introduit un morceau de code qui utilise la réflexion pour vérifier s'il y a une valeur par défaut définie pour un attribut d'une classe et, sinon, il décide que la classe est "Nillable "Et ajoute nillable =" true "à la définition d'attribut dans le WSDL. Ceci est apparemment destiné à améliorer l'interopérabilité avec une version squameuse de .NET.

Pour empêcher Zend Framework d'ajouter le drapeau Nillable, initialisez simplement ces propriétés lorsqu'ils sont déclarés, par exemple.

/** @var string */
public $sStockCode = '';
/** @var string */
public $sQty = '';

J'espère que cela pourra aider.

Autres conseils

nillable='true' Indique que l'élément peut être nul dans une instance de document XML. Si l'élément d'un document XML est nul, alors cela est indiqué par

<sStockCode xsi:nil='true' />

(l'élément lui-même doit être vide)

Il semble que vous deviez changer le XSD pour nillable='false'. De plus, la chaîne peut être vide - si vous voulez empêcher contre les chaînes vides avec le minLength attribut dans votre XSD. Vous pouvez également utiliser la valeur par défaut pour spécifier une valeur par défaut pour la chaîne si elle n'est pas fournie.

W3Schools a un bon matériel de référence pour les XSD ici

Hth

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top