SOAP-nillable =“ true”

Gab*_*eri 1 soap wsdl web-services zend-framework zend-soap

我正在使用Zend Framework构建Web服务。我正在使用Zend_Soap_AutoDiscover类来生成WSDL。我在此Web服务表单示例中使用了各种复杂类型:

StockItemEntity类

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

    public function __construct($sStockCode, $sQty){
        $this->sStockCode = $sStockCode;
        $this->sQty = $sQty;
    }   
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

根据我在网络上的阅读了解,nillable =“ true”在那里,因为可以将任何对象的属性设置为null。因此,即使StockItemEntity对象的所有属性都设置为null,也需要nillable =“ true”来维护有效的XML文档。

我担心的是,这两个属性必须始终传递给web方法。是否可以删除“ nillable = true”以强制属性不为null?否则,有任何方法可以在这些属性中强制使用非null值。我希望避免在网络服务方面进行验证。

谢谢

亲切的问候

加布里埃尔

Jam*_*esG 5

在Zend Framework 1.10.7和1.11.0之间的某个阶段,他们引入了一段代码,该代码使用反射来检查是否为类的属性定义了默认值,如果没有,则确定该类为“可空的”并将nillable =“ True”添加到WSDL中的属性定义。这显然是为了提高与.Net某些易用版本的互操作性。

要阻止Zend Framework添加nillable标志,只需在声明它们后初始化这些属性即可。

/** @var string */
public $sStockCode = '';
/** @var string */
public $sQty = '';
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。