什么是'任何'在wsdl和我如何使用PHP调用wsdl函数?

时间:2014-12-26 05:20:20

标签: php web-services soap wsdl

这段代码是我wsdl的一小部分。在这里,我还没有理解

<s:sequence>
    <s:any/>
</s:sequence>

请告诉我这是什么

<s:element name="CalculStudents">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="doc">
                <s:complexType mixed="true">
                    <s:sequence>
                        <s:any/>
                    </s:sequence>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
</s:element>

使用php我在下面调用此函数是我的代码

 $client = new SoapClient("some.wsdl");
 $params = array("any"=>'');
 $result = $client->CalculStudents(array('doc'=>$params));

但它正在抛出错误

 Exception Error! Server was unable to process 
 request.Object reference not set to an instance of an object.

告诉我如何解决这个问题。这是一个php调用错误还是wsdl错了?

2 个答案:

答案 0 :(得分:1)

在XML Schema中,the any element是一种指定“任何非空元素序列”的方法。

所以你的WSDL说,“这个方法可以接受任何数据,并且可能会返回任何数据。”这显然是完全虚假的,而且你没有没有 WSDL就好了。此时您唯一的办法是向API供应商大吼大叫,并祈祷您最终获得有用的文档。

答案 1 :(得分:0)

<xs:any>
  id = xs:ID
  maxOccurs = ( xs:nonNegativeInteger | “unbounded” ) : “1”
  minOccurs = xs:nonNegativeInteger : “1”
  namespace = ( (“##any” |  “##other” ) | list of (xs:anyURI | “##targetNamespace” | “##local”) ) ) : “##any”
  processContents = (“skip” | “lax” | “strict”) : “strict”

##any: any element from any namespace
##other: any element from any namespace other than the target
##targetNamespace: any element from the target

跳过:不要尝试验证这些元素(通过查找架构) lax:尝试验证但如果找不到架构则不要抱怨 strict:如果找不到模式,则尝试验证和错误

$params = array("id"=>'',"maxOccurs"=>'',"minOccurs"=>'',"namespace"=>'',"processContents"=>'');
  $result = $client->__soapCall("CalculStudents",array("any"=>$params));