如何创建所需的WebMethod参数

时间:2010-02-05 20:54:31

标签: java web-services jaxb jax-ws java-metro-framework

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

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

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

3 个答案:

答案 0 :(得分:28)

我已经确认Metro 2.0允许您在参数上设置@XmlElement(required=true)。生成的xsd没有minOccurs=0。它会从生成的xsd中留下minOccurs,因此它采用默认值1。

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

我发布了同样的问题on the Java forums

感谢jitu的答案,并指出minOccurs默认为1,因此将其从.xsd中删除会产生预期效果。

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

答案 1 :(得分:6)

  

生成的xsd显示minOccurs = 0。

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

  

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

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

实际上,这是Java-first糟透人的原因之一(是的,开发人员喜欢它但是it just does not work):它很脆弱,合同可能会改变(!),它不会给你所有的控制你需要,它没有fit well with WS-Security等等。所以,确实contract-first并不令人愉快,但至少它是有效的。

答案 2 :(得分:2)

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

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

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