2012-07-16 72 views
0

Web服务应验证输入数据并写入数据库。之后,其他服务应读取数据并从中创建一个xml文件。Webservice动态数据传输和验证

所以服务只是做数据传输和转换(WS- *参数=>数据库)。

“动态”web服务还应该包含一组变量参数(“容器”),导致客户端变化很大并且很快,这不应该以修改接口和底层实现结束。

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

初始想法:

  • 只需发送文件作为附件和带的.xsd架构“固定”和“容器”部分的.xsd模式验证它在web服务。如果可变部分仅更改用于验证的“容器”.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”。所以这项服务将变得非常通用。

回答

1

有两种主要类型的验证的:

  1. 字段类型验证 - 确保发送的值是正确的类型和形成(即检查该字段用户名包含字符串或ID包含号码等),这由webservice解析器/ FW处理。所以如果用户发送了错误的类型,解析器会抛出一个错误。
  2. 逻辑验证 - 运行中的实际值一些业务逻辑:

    如果(价值== NULL){//动作} 其他{//做别的事情}

我不太确定你所需要的验证,但是从我的理解,‘容器’应该是非常动态的,所以它可能会包含这样的内容:

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

在这种情况下,XSD验证不会你做得很好,你可能需要编写一些逻辑来弄清楚。

我可能完全错了,如果是这样的结构,请张贴一些例子,这样我可以更好地理解它。

编辑:

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

另一种选择可能是使用组,看起来here

+0

我编辑了最初的问题。 – 2012-07-16 13:04:55