我的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验证?
答案 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为您验证消息。