WebLogic不会在webservices中验证minOccurs =“1”

时间:2012-10-03 15:55:44

标签: web-services weblogic xml-validation

我的WebService部署在WebLogic 10.3.3上。

WSDL / XSD将输入参数number描述为必需:

<xs:element minOccurs="1" maxOccurs="1" name="number" type="xs:int"/>

MinOccurs="1"表示XML消息必须包含<number>标记,不是吗?

我希望WebLogic必须验证所有请求,并在请求无效时抛出服务器错误响应。

不幸的是,我的SOAP客户端能够发送没有<number>标记的SOAP请求,而我的webservice实现收到了这样一个无效的请求。

你能告诉我,它是正确的行为还是WebLogic中的缺陷?

我的网络服务是否应该执行自己的XML验证?

2 个答案:

答案 0 :(得分:0)

默认情况下,WebLogic没有启用XSD架构验证。您可以通过向webservice @SchemaValidation添加注释来启用它(确保它是com.sun.xml.ws.developer版本而不是com.sun.xml.ws.internal.developer)。但是,如果您有一个复杂的XSD架构(例如,GS-1 XSD架构出现问题),这种验证效果不会很好。我认为它与weblogic使用的xml文件的xercex解析器有关,因为它不能总是找到所有元素,但到目前为止我无法找到它的底部。它适用于简单的模式。

如果需要验证复杂模式,最好编写自己的验证器并将其添加到WS Message Handler。这是相当多的工作,但你可以完全控制它,到目前为止我没有找到其他解决方案。

答案 1 :(得分:0)

对于类似情况,请查看我的回答here

如前所述,您可以使用提供的@SchemaValidation注释告诉WebLogic为您验证消息。