30

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

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

除了手动编辑 xsd 并将 minOccurs 设置为 1 之外,有没有办法让我的 WebMethod 参数成为必需?

4

3 回答 3

28

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

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

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

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

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

于 2010-02-09T19:37:52.853 回答
6

生成的 xsd 显示 minOccurs=0。

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

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

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

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

于 2010-02-06T21:40:05.897 回答
3

这是对同一问题的另一个讨论。根据响应 Metro 2.0 支持将 @XmlElement 放在方法参数上,这应该可以解决我的问题。

http://forums.java.net/jive/thread.jspa?messageID=385565

Metro 2.0 于 2009 年 12 月 10 日发布,因此不再在 EA 中。我会试一试,看看它是否有效。

于 2010-02-09T04:33:36.740 回答