我正在使用Zend Framework构建Web服务。我正在使用Zend_Soap_AutoDiscover类来生成我的WSDL。我在此Web服务表单示例中使用各种复杂类型:
StockItemEntity Class
class StockItemEntity {
/** @var string */
public $sStockCode;
/** @var string */
public $sQty;
public function __construct($sStockCode, $sQty){
$this->sStockCode = $sStockCode;
$this->sQty = $sQty;
}
}
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>
根据我从网上阅读的理解,nillable =“true”就在那里,因为任何对象的属性都可以设置为null。因此,即使StockItemEntity对象的所有属性都设置为null,nillable =“true”也需要维护有效的XML文档。
我担心的是,必须始终将这两个属性传递给Web方法。是否有可能删除“nillable = true”以强制属性不为null?或者有没有办法在这些属性中强制非空值。我希望避免在网络服务方面验证它们。
由于
亲切的问候
加布里埃尔
答案 0 :(得分:5)
在Zend Framework 1.10.7和1.11.0之间的某个阶段,他们引入了一段代码,该代码使用反射来检查是否为类的属性定义了默认值,如果没有,则决定该类是“nillable”并将nillable =“True”添加到WSDL中的属性定义。这显然是为了改善与.Net的一些片状版本的互操作性。
要阻止Zend Framework添加nillable标志,只需在声明它们时初始化这些属性,例如
/** @var string */
public $sStockCode = '';
/** @var string */
public $sQty = '';
希望有所帮助。
答案 1 :(得分:0)
nillable='true'
表示元素在xml文档实例中可以为null。
如果xml文档中的元素为null,则由
<sStockCode xsi:nil='true' />
(元素本身必须为空)
听起来您需要将xsd更改为nillable='false'
。此外,string可以为空 - 如果要防止xsd中具有minLength
属性的空字符串。如果未提供字符串,您还可以使用默认值指定字符串的默认值。
W3schools has good reference material for XSD's here
HTH