我正在使用PHP SoapServer
类和相应的WSDL开发SOAP服务。
SOAP Schema定义(WSDL)允许"选择" types:它需要包含属性的EITHER,如下所示:
<xsd:element name="AnswerA">
<xsd:complexType name="typeA">
<xsd:choice>
<xsd:element minOccurs="0" name="propB" type="ns0:typeB" /> -->
<xsd:element minOccurs="0" name="propC" type="ns0:typeC" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
我正在使用SoapServer提供这样的构造,SoapServer通过类图知道它的SOAP类型。 typeA的相应PHP类如下所示:
class TypeA {
private $propB = null;
private $propC = null;
public function setPropB(TypeB $b) { $this->propB = $b; }
public function setPropC(TypeC $c) { $this->propB = $c; }
public function getPropB() { return $this->propB; }
public function getPropC() { return $this->propC; }
}
我现在提供一个PHP SoapServer,它响应包含这些类型的Soap消息,但只有propC set:
$typeA = new TypeA();
$typeA->setPropC(new TypeC('someValue'));
// ...
$mySoapServer = new SoapServer(/*....*/);
$mySoapServer->addFunction('myfunction');
function myfunction() {
return $typeA;
}
这是有效的,但在答案中,我总是得到&#34; propB&#34;,永远不会&#34; propC&#34;,即使&#34; propB&#34;是&#34; propC&#34;未设置:
<!-- ..... -->
<AnswerA>
<propB></propB>
</AnswerA>
<!-- ..... -->
这不是完全错误的,它不是我想要的:在XSD&#34;选择&#34;类型,我想提供具有值的属性(好吧,&#34; null&#34;也是某种值,我猜)。那我怎么能告诉&#34; PHP SoapServer在XSD&#34;选择&#34;的情况下提供的属性。类型?