我正在尝试使用大型机集成产品(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>
此服务在另一端的工作方式,如果将值传递给服务,即使它为空或空白或默认,该值也将在第三方系统上更新。 我需要一种方法来将有效负载中的元素OMIT转换为服务。这一般是如何处理的?我已经尝试使用C#作为此服务的客户端,但我唯一可以找到它们提供的是非基本类型的Specified
后缀变量,但没有找到省略原始类型的方法。如果我通过简单POST
将SOAP消息发送到第三方服务器来调用此Web服务,我可以简单地省略XML以获取我不想传递的值,但我只是想知道不同的Web服务客户端实现方式处理这个。
如果有帮助我相信第三方正在使用Apache Axis,并表示他们可以省略可选参数。
答案 0 :(得分:0)
当您尝试使用与默认/可选arg缺失相关的xml部分进行POST时,您是否注意到服务器(apache轴)侧的该arg有任何更新?如果你这样做了,那么可能是如何为该WSDL实现服务器端逻辑的问题(不严格遵守WSDL定义的契约/模式)。
答案 1 :(得分:0)
我使用过第三方Web服务,要求您为所有具有Specified
参数的可用标记传递值。只要您设置Specified=false
。
通常你会得到你的原始类型Specified
标签以及int, bool, double
这样的处理类型是一个问题,因为他们已经定义了默认值而没有设置{{1 }} tag将导致这些值默认为其默认定义值。