使用JAX-WS进行WSDL运行时验证

Den*_*ian 5 xsd wsdl web-services jax-ws

我们正在开发一个支持Web服务的MDA平台.用户可以在运行时提供WSDL,我们在内部使用JAX-WS生成所有工件(服务器的服务接口和实现,以及客户端的使用者).

我们希望在用户提供的WSDL文档上添加验证.现在,用户必须使用外部工具(如Oxygen,XMLSpy或Web工具)对其进行验证,但我们希望将其添加为系统的一部分.一个很好的功能是模式验证,包括WSDL的嵌入式模式.

在JAX-WS(RI)中,运行时支持模式验证(使用@SchemaValidation批注),但我们没有找到任何对WSDL验证的支持.

我们已经尝试集成Eclipse的WSDL验证器,但它似乎对我们没有用.

有没有办法用JAX-WS做到这一点?如果没有,是否还有其他可以整合的验证框架?

谢谢

Pet*_*dea 2

你的问题有点混乱,我需要先澄清一下。

您似乎希望能够验证 WSDL(语法 + WS-I)和 XSD(由 WSDL 嵌入或从外部引用)。另一方面,您引入@SchemaValidation,它实际上用于验证实例文档。

在传统的开发方法中,人们可能会说您至少希望能够验证设计时工件(WSDL+XSD)。

对于这种情况,我建议如下:

WSDL:对于 WS-I 合规性测试,请查看WS-I 站点的测试工具部分。目前尚不清楚他们的测试工具所拥有的许可如何与您的测试工具一起使用,但至少它应该让您知道如果它不适合您,应该查看什么。

更新:其他 WSDL 验证资源: -基于Eclipse,如何在 Eclipse 外部使用。

XSD:如果您确实需要对 XSD 文件进行单独验证,那么对于生产质量的产品来说事情可能会变得棘手;WSDL4J在这里没有太大帮助,我相信XSOM是完成此类工作的最佳选择。您必须从类型部分中提取内容作为一个或多个 XSD 文件(可能是多个 XSD 文件,看一些示例,我认为 Microsoft 的 SharePoint WSDL 作为一个很好的测试用例),为每个提取的与 WSDL 位置匹配的 XSD,然后使用 XSOM 验证它们。

由于您正在生成客户端,因此您很可能不关心验证,例如 HTTP 标头(SOAP 1.1/HTTP、SOAPAction,如果它与 WSDL 操作定义匹配)。如果您最终也对此产生了兴趣,我称之为运行时验证,那么我会在您的方法中推荐不同的布局(即我不会依赖@SchemaValidation,而是通过透明、通用的代理服务来实现) )。