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

时间:2012-01-24 18:42:16

标签: web-services xsd wsdl jax-ws

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

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

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

我们尝试整合Eclipse's WSDL validator,但它似乎对我们不起作用。

有没有办法用JAX-WS做到这一点? 如果没有,我们可以整合其他任何验证框架吗?

由于

1 个答案:

答案 0 :(得分:2)

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

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

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

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

WSDL:对于WS-I合规性测试,请查看test tools section of the WS-I site。目前尚不清楚他们的测试工具的许可如何与您合作,但至少它应该让您知道如果它对您不起作用的话应该是什么。

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

XSD:如果你真的需要对XSD文件进行单独验证,对于生产质量的产品来说可能会变得棘手; WSDL4J在这里帮助不大,我相信XSOM是这种工作的方法。你必须从类型部分中提取内容作为一个或多个XSD文件(可能是一个以上的XSD文件,看看一些例子,微软的SharePoint WSDL作为一个好的测试案例出现在我的脑海中),为你分配一个基础uri每个提取的XSD与WSDLs位置匹配,然后使用XSOM验证这些。

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