0

Web 服务应该验证输入数据并写入数据库。稍后,其他服务应该读取数据并从中创建一个 xml 文件。

所以服务只是进行数据传输和转换(WS-* Parameter => Database)。

“动态”webservice 还应该包含一组可变参数(“容器”),导致客户端变化很多且很快,这不应该以修改接口和底层实现而告终。

如何做以及在哪里处理验证?

初步想法:

  • 只需发送一个文件作为附件,并在 web 服务中使用 .xsd 模式验证它,“固定”部分使用 .xsd 模式,“容器”部分使用 .xsd 模式。如果可变部分更改,则只有用于验证的“容器”.xsd 必须更改。容器可以是 base64 编码的 xml。如果发生验证错误,Web 服务会以错误响应。

  • 使用所有标准项作为 WSD 参数并传递 base64 编码的容器。WS-* 对标准参数进行验证,并且仅针对另一个 .xsd 验证容器。

没有对值进行逻辑/语义评估,这应该在以后完成。仅需要字段类型验证。

容器应该是 xml,如:

 ... standard elements xml ...
 <embeddedContainer>
  <customItemsFromWSClientOne>
   <reallyCustomItemA>
    <substructure>
     <itemABC></itemABC>
   </substructure>
   <anotherStructure></anotherStructure>
   </reallyCustomItemA>
 </customItemsFromWSClientOne>
</embeddedContainer>
... standard elements xml ...

另一个客户端可能会发送其他参数,例如具有完全不同结构的“customItemsFromWSClientTwo”。所以服务会变得非常通用。

4

1 回答 1

1

有两种主要类型的验证:

  1. 字段类型验证 - 确保发送的值具有正确的类型和格式(即检查字段 userName 是否包含字符串,或 id 是否包含数字等),这由 web 服务解析器/FW 负责。因此,如果用户发送了错误的类型,解析器就会抛出错误。
  2. 逻辑验证 - 对实际值运行一些业务逻辑:

    if(value==null){//do something} else{//do something else}

我不确定您需要什么验证,但据我了解,“容器”应该是非常动态的,因此它可能包含以下内容:

<paramName>someParamName</paramName>
<paramValue>someValue</paramValue>
 ...

在这种情况下,XSD 验证不会对您有多大好处,您可能需要编写一些逻辑来解决这个问题。

我可能对结构完全错误,如果是这样,请发布一些示例,以便我更好地理解它。

编辑:

为了使“容器”能够包含各种 XML 结构,您需要将其定义为xsd:any。您可以定义processContents属性strict,如果定义了正确的命名空间,webservice 解析器应该能够验证它。在这里查看更多信息。

另一种选择可能是使用组,看这里

于 2012-07-16T12:54:28.017 回答