“minOccurs”并在Java Contract-First Web服务中生成类型

时间:2012-11-20 08:01:54

标签: java web-services jaxb

我在Java中使用契约优先生成的Web服务时遇到问题。在我的架构中,我有类似的东西:

<element maxOccurs="1" minOccurs="1" name="GUID" type="xs:long" /> 

使用这样的字段生成类:

protected long GUID;

现在,当我尝试触发我的webservice时,如果没有为GUID设置任何值,则new java long的默认值设置为(0)并且不会抛出异常。当然这不是好行为,因为我应该需要guid元素。 另一方面,当我将我的架构元素更改为这样的内容时:

<element maxOccurs="1" minOccurs="0" name="GUID" type="xs:long" /> 

(从逻辑上看,这是不正确的,因为需要GUID元素)生成的类字段如下所示:

{protected Long GUID; }

现在,当Web服务执行中没有设置GUID时,GUID值为null,我可以检查是否从java代码中抛出异常。

所以我想请教您如何使用带有受保护的Long GUID的minOccurs =“0”生成的类; (或者至少在未设置此值时获得异常)

我正在使用glassfish 2.1.1和SopaUI提供的JAXB来执行Web服务。

1 个答案:

答案 0 :(得分:0)

我能够找到解决方案。很简单:我必须添加nillable =“true”:

<element maxOccurs="1" minOccurs="1" name="GUID" type="xs:long" nillable="true" /> 

生成的类中提交的类型现在很长!
BTW。这表明即使没有人回答它,描述你的问题也是好的(也许它是像“橡皮鸭调试”方法中的类似机制?:))