如何使 WebMethod 参数成为必需参数

我们使用“从 Java 开始”的方法来创建使用 Metro 1.5 堆栈的 JAX-WS 2.0 Web 服务。当我们将像SoapUI这样的标准工具指向我们的一个Web服务时,它表明WebMethods的参数是可选的。生成的 xsd 显示 minOccurs=0。

我需要一种方法来使WebMethod参数成为必需的(可能是xsd中的minOccurs=1)在“从Java开始”方法中。我认为有一个Java注释,但我无法找到一个。XmlElement 注释具有必需的属性,但 XmlElement 不能应用于 WebMethod 参数。

有没有办法使我的WebMethod参数成为必需的,而不是手动编辑xsd并将minOccurs设置为1?


答案 1

我已经验证了Metro 2.0确实允许您设置参数。生成的 xsd 没有 。它省略了生成的 xsd,因此它假定默认值为 1。@XmlElement(required=true)minOccurs=0minOccurs

您还必须通过将 JAX-WS 2.2 放在目录中来升级 JDK。webservices-api.jarendorsed/

我在Java论坛上发布了同样的问题。

感谢jit给出的答案,并指出minOccurs默认为1,因此将其排除在.xsd之外具有预期的效果。

当在参数上设置@XmlElement(required=true) 时,SoapUI 不再指示该参数为可选参数。


答案 2

生成的 xsd 显示 minOccurs=0。

这是根据规范:任何非基元都是可选的,只有基元是必需的。

我需要一种方法来使WebMethod参数成为必需的(可能是xsd中的minOccurs=1)在“从Java开始”方法中。

这是不可能的,除非您使用前面提到的基元。

实际上,这是Java-first很糟糕的原因之一(是的,开发人员喜欢它,但它就是不起作用):它很脆弱,契约可能会改变(!),它没有给你所有你需要的控制,它不适合WS-Security,等等。因此,确实,合同优先并不令人愉快,但至少,它是有效的。


推荐