使用无限参数的wsdl操作

时间:2012-08-06 15:17:22

标签: php wsdl soapserver

我必须为我的SoapServer创建WSDL,它从另一个服务传递数据。提供给我的数据具有以下结构:

<operationName>
    <parameterHeader></parameterHeader>
    <parameterData1></parameterData1>
    <parameterData2></parameterData2>
    ...
    <parameterDataN></parameterDataN>
</operationName>

这意味着我必须创建方法

function operationName(parameterHeader, parameterData1, parameterData2, ... parameterDataN){
  ...
}

无法知道将为我的操作提供多少参数。

作为一个解决方案,我正在尝试为没有参数的方法创建WSDL,但在此方法中使用函数func_get_args()来获取所有参数。

不幸的是,我仍然无法创建正确的WSDL,我不确定这是否可行。

我的网络服务应该收到的精确数据(示例)如下:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <env:Header/>
    <env:Body>
        <tns:operationResponse xmlns:tns="http://somedomain.com/demo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                              xmlns="http://anotherdomain.com/anotherdemo">
            <tns:ResponseHeader attrName1="data1" attrName2="data2" attrName3="data3" />
            <tns:ObjectData>
                <tns:ElementData ElementAttr1="data1" ElementAttr2="data2" ElementAttr3="data3"/>
            </tns:ObjectData>
            <tns:ObjectData>
                <tns:ElementData ElementAttr1="data21" ElementAttr2="data22" ElementAttr3="data23"/>
            </tns:ObjectData>
            <tns:ObjectData>
                <tns:ElementData ElementAttr1="data31" ElementAttr2="data32" ElementAttr3="data33"/>
            </tns:ObjectData>
            <tns:ObjectData>
                <tns:ElementData ElementAttr1="data41" ElementAttr2="data42" ElementAttr3="data43"/>
            </tns:ObjectData>
        </tns:operationResponse>
    </env:Body>
</env:Envelope>

您是否有过使用此类WSDL的经验或者有关如何获得数据结构的一些想法?

我虽然可以将其作为参数名称考虑在内,因此其他数据可以用作complexType。也许WSDL提供了一些技巧......

1 个答案:

答案 0 :(得分:0)

像迈克一样,我的第一种方法是使用数组参数。虽然可以想象一个过程中的无限参数,但我很确定WSDL中的那种定义只是枚举,所以你必须明确列出你的参数。 还要考虑一些Web服务实现可能无法管理无限制的args(在这种情况下,在请求者方面,所以这是他们的问题,而不是你的问题。)