Web服务动态数据传输和验证

时间:2012-07-16 12:42:01

标签: java web-services validation endpoint

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

因此该服务只进行数据传输和转换(WS- * Parameter => Database)。

“动态”Web服务还应该包含一组变量参数(“容器”),导致客户端快速更改并且不应该在修改接口和底层实现时结束。

如何处理以及在何处处理验证?

最初的想法:

  • 只需将文件作为附件发送,然后在webservices中使用.xsd架构验证“fixed”和“容器”部分的.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'。所以服务将变得非常通用。

1 个答案:

答案 0 :(得分:1)

有两种主要的验证类型:

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

    if(value == null){//做某事} 否则{//做别的事情}

  3. 我不确定你需要什么样的验证,但据我所知,“容器”应该是非常动态的,所以它可能包含如下内容:

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

    在这种情况下,XSD验证对你没有多大好处,你可能需要编写一些逻辑来解决它。

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

    修改

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

    另一个选项可能是使用群组,请查看here