如何创建所需的WebMethod参数

Dea*_*lze 29 java web-services java-metro-framework jax-ws jaxb

我们使用"从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?

Dea*_*lze 28

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

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

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

感谢jitu的答案,并指出minOccurs默认为1,因此将其从.xsd中删除具有所需的效果.

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


Pas*_*ent 6

生成的xsd显示minOccurs = 0.

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

我需要一种方法来使"从Java开始"方法中需要WebMethod参数(在xsd中可能是minOccurs = 1).

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

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

  • 我会说WSDL首先同样不起作用.您链接的博客讨论了使用复杂的Request和Return对象进行包装,但这会带来许多问题,例如隐藏底层字段中的必需内容,滥用重用等等......然后,我会坚持使用Spring和代理来创建类似WebService的东西的示例在本地显示为接口的简单实现.以这种方式编写本地接口是让您忘记它是*通过JAX-WS公开的服务的一部分. (2认同)