1

我的 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 请求,而我的 web 服务实现接收到这样一个无效请求。

请告诉我,这是正确的行为还是 WebLogic 中的缺陷?

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

4

2 回答 2

0

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

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

于 2013-02-15T14:58:13.567 回答
0

看看我的回答这里有一个类似的情况。

正如已经指出的,您可以使用提供的@SchemaValidation注释告诉 WebLogic 为您验证消息。

于 2015-01-22T00:23:52.937 回答