代码之家  ›  专栏  ›  技术社区  ›  Jay

调用Web服务时如何处理minoccurs=“0”?

  •  1
  • Jay  · 技术社区  · 14 年前

    我有一个使用大型机集成产品(datadirect shadow z/services)尝试调用的Web服务,但我的问题更多的是一个一般性的问题。我想知道定义为minoccurs=“0”的元素通常是如何处理的。我调用的第三方服务上的操作具有complexType元素,其中所有元素都标记为minoccurs=“0”。

    WSDL示例

    <xs:element minOccurs="0" name="Request">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="startDate" type="xs:dateTime"/>
                <xs:element minOccurs="0" name="endDate" type="xs:dateTime"/>
                <xs:element minOccurs="0" name="requestId" type="tns:ObjectName"/>
                <xs:element minOccurs="0" name="reasonCode" type="xs:string"/>
                <xs:element minOccurs="0" name="actionType" type="xs:string"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" name="option" type="xs:string"/>
                <xs:element minOccurs="0" name="comments" type="xs:string"/>
                <xs:element minOccurs="0" name="Name" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    

    此服务在另一端工作的方式,如果将值传递给该服务, 即使它为空或空白或默认值 ,该值将在第三方系统上更新。 我需要一种方法在服务的有效负载中省略该元素 . 一般如何处理?我试过使用C作为此服务的客户,但我发现他们提供的唯一一件事是 Specified 非基元类型的后缀变量,但找不到省略基元类型的方法。如果我只是通过 POST 将SOAP消息发送到第三方服务器时,我可以简单地省略不想传递的值的XML,但我只是想知道不同的Web服务客户端实现如何处理这个问题。

    如果这有助于我相信第三方正在使用ApacheAxis,并说他们可以省略可选参数。

    2 回复  |  直到 14 年前
        1
  •  0
  •   user468074    14 年前

    当您尝试使用与缺少默认/可选参数相关的XML部分进行发布时,是否注意到服务器(ApacheAxis)端的该参数有任何更新?如果您这样做了,那么可能是服务器端逻辑是如何为该WSDL实现的问题(不严格遵守WSDL定义的契约/模式)。

        2
  •  0
  •   JD Stuart    14 年前

    我曾与第三方Web服务合作,要求您为所有具有 Specified 参数。只要设置了 Specified=false .

    通常你会让你的原始类型 明确规定 标签以及处理类型,例如 int, bool, double 是一个问题,因为它们定义了默认值,而没有设置 明确规定 标记将使这些值默认为其默认定义值。