minOccurs=";0“;在VB.NET和Java中使用很长时间
我有一个用VB.NET编写的Web服务,在其中,我有一个很长的定义:minOccurs=";0“;在VB.NET和Java中使用很长时间,java,vb.net,xsd,Java,Vb.net,Xsd,我有一个用VB.NET编写的Web服务,在其中,我有一个很长的定义: <s:element minOccurs="0" maxOccurs="1" name="clientId" type="s:long"/> 现在,每当我从另一个VB.NET应用程序调用此WS时,以及设置clientIdvar,我还必须将clientSpecified设置为True——这是.NET的怪癖。但是,我的客户机使用Java,问题是-他们是否也必须这样做,并将clientspecified设置为Tru
<s:element minOccurs="0" maxOccurs="1" name="clientId" type="s:long"/>
现在,每当我从另一个VB.NET应用程序调用此WS时,以及设置clientId
var,我还必须将clientSpecified
设置为True
——这是.NET的怪癖。但是,我的客户机使用Java,问题是-他们是否也必须这样做,并将clientspecified
设置为True
这个布尔值不是规范的一部分,所以如果他们确实需要设置它,我必须警告他们 如果您的客户机使用的是java,只需给他们xsd文件就足够了,因为它可以编译成java类,在被封送到xml之前提供验证
但需要注意的是,minOccurs=0意味着可以选择设置 在Java端,这种构造通常被编译成
Java.lang.Long
(包装类)类型的属性,而不是Long
(原语类型),使用null
值表示元素不存在的情况。我将向客户端提供XSD,但问题是,他们是否必须将clientId指定的
变量设置为True
才能传递clientId
值?因为这是我在.NET中必须做的。我不知道这是VB.NET的一个怪癖,还是它也会影响Java。据我所知,不是。clientId是一个强制属性吗?clientId
不是强制属性,因此minOccurs=0
。但是,当我确实想在clientId
中传递一个非空值,并且我正在使用VB.NET应用程序来传递该值时,我必须设置clientdSpecified=True
——这是.NET的一个怪癖。我关心的是,使用Java应用程序调用我的WS的人是否也需要这样做。clientidSpecified
不会出现在XSD中,它会在我向项目添加WebService时出现在visual Studio中的Reference.vb文件中。如果java端使用JAX-WS,则不会,模式编译器会将元素表示为java.lang.Long
,可以根据需要设置为null
或不为null。但是您需要关心的是如何正确使用WSDL,客户机工具包如何解释WSDL取决于他们。如果我没记错的话,java端将由java.lang.Long表示,因此一旦设置,它就不是空的。是的,这没有帮助,不是吗?;)。。。。我将删除并更新注释。这实际上取决于您的Java朋友使用的XSD到代码绑定技术。即使在这项技术中,它也取决于版本。例如:JAXB 1.x与2.x、自定义设置与默认绑定;有关示例讨论,请查看