How can I make a WebMethod parameter required

浪子不回头ぞ 提交于 2019-11-27 18:22:08
Dean Schulze

I've verified that Metro 2.0 does allow you to set @XmlElement(required=true) on a parameter. The generated xsd does not have minOccurs=0. It leaves minOccurs out of the generated xsd so it assumes the default value of 1.

You also have to upgrade your JDK by putting the JAX-WS 2.2 webservices-api.jar in the endorsed/ directory.

I posted the same question on the Java forums.

Thanks to jitu for both the answer and pointing out that minOccurs defaults to 1 so leaving it out of the .xsd has the desired effect.

When @XmlElement(required=true) is set on the parameter SoapUI no longer indicates that the parameter as optional.

The generated xsd shows minOccurs=0.

This is per specification: any non-primitives are optional, only primitives are required.

I need a way to make WebMethod parameters required (maybe minOccurs=1 in the xsd) in the "start from Java" approach.

This is not possible, unless you use primitives as previously mentioned.

And actually, this is one of the reasons why Java-first sucks (yeah, developers like it but it just does not work): its fragile, the contract may change(!), its doesn't give you all the control you need, it doesn't fit well with WS-Security, etc. So, indeed, contract-first is not pleasant, but at least, it works.

Here is another discussion of this same question. According to the response Metro 2.0 supports putting @XmlElement on a method parameter which should solve my problem.

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

Metro 2.0 was released on Dec. 10, 2009 so it is no longer in EA. I'll give it a try and see if it works.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!