PHP SoapServer:如何选择XSD'选择'值?

时间:2017-02-08 08:18:35

标签: php soap xsd wsdl

我正在使用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;的情况下提供的属性。类型?

0 个答案:

没有答案