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

Java 如何使WebMethod参数成为必需参数,java,web-services,jaxb,jax-ws,java-metro-framework,Java,Web Services,Jaxb,Jax Ws,Java Metro Framework,我们使用“从Java开始”的方法,使用Metro 1.5堆栈创建JAX-WS 2.0 web服务。当我们将标准工具(如SoapUI)指向我们的一个web服务时,它表明WebMethods的参数是可选的。生成的xsd显示minOccurs=0 我需要一种方法使WebMethod参数在“从Java开始”方法中成为必需的(在xsd中可能是minOccurs=1)。我认为这有一个Java注释,但我还没有找到。XmlElement注释具有required属性,但XmlElement无法应用于WebMeth

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

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

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

生成的xsd显示minOccurs=0

这是根据规范:任何非原语都是可选的,只需要原语

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

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


事实上,这也是Java最初很糟糕的原因之一(是的,开发人员喜欢它,但是):它很脆弱,合同可能会改变(!),它没有给你所有你需要的控制权,它没有,等等。所以,确实不愉快,但至少它是有效的。

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


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

我已验证Metro 2.0是否允许您在参数上设置
@XmlElement(required=true)
。生成的xsd没有
minOccurs=0
。它将
minOccurs
从生成的xsd中删除,因此它假定默认值为1

您还必须通过将JAX-WS2.2
webservicesAPI.jar
放在
approved/
目录中来升级JDK

我发了同样的问题

感谢jitu给出的答案,并指出minOccurs默认值为1,因此将其排除在.xsd之外具有所需的效果


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

感谢您的评论和链接。我希望那些臃肿的web服务书籍(其中一些我已经读过了——我的意思是费力地读过了)能像你一样清楚地说出来。@Dean,不客气。感谢大家对JAX-WS2.2的反馈(即使这不在最初问题的范围内)。您链接到的博客谈到使用复杂的请求和返回对象进行包装,但这带来了许多问题,例如在底层字段中隐藏必需的内容、滥用重用等……然后,我举了一个很好的例子,比如使用Spring和代理使Web服务这样的东西看起来像本地接口的简单实现。以这种方式破坏本地接口是防止您忘记这是一个碰巧通过JAX-WS公开的服务的一部分。它似乎可以工作,但提供的链接是404,有机会获得更新的源代码吗?