我们使用“从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?
答案 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񞈝
Metro 2.0于2009年12月10日发布,因此不再是EA。我会试一试,看看它是否有效。