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'。所以服务将变得非常通用。
答案 0 :(得分:1)
有两种主要的验证类型:
逻辑验证 - 在实际值上运行一些业务逻辑:
if(value == null){//做某事} 否则{//做别的事情}
我不确定你需要什么样的验证,但据我所知,“容器”应该是非常动态的,所以它可能包含如下内容:
<paramName>someParamName</paramName>
<paramValue>someValue</paramValue>
...
在这种情况下,XSD验证对你没有多大好处,你可能需要编写一些逻辑来解决它。
我可能对结构完全错误,如果是这样,请发布一些例子,以便我能更好地理解它。
修改强>
为了使“容器”能够包含各种XML结构,您需要将其定义为xsd:any。您可以将processContents
属性定义为strict
,如果定义了正确的命名空间,则Web服务解析器应该能够验证它。查看here了解更多信息。
另一个选项可能是使用群组,请查看here。