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

5
我们正在开发一个具有Web服务支持的MDA平台。用户可以在运行时提供WSDL,我们使用JAX-WS内部生成所有工件(服务器的服务接口和实现以及客户端的消费者)。
我们想要在用户提供的WSDL文档上添加验证。目前,用户必须使用外部工具(如Oxygen、XMLSpy或Web工具)进行验证,但我们希望将其作为系统的一部分添加。一个不错的功能是模式验证,包括WSDL的嵌入式模式。
在JAX-WS(RI)中,支持在运行时进行模式验证(使用@SchemaValidation注释),但我们没有找到任何关于WSDL验证的支持。
我们尝试集成Eclipse的WSDL验证器, 但它似乎对我们无效。
是否有任何使用JAX-WS的方法来完成这项工作? 如果没有,是否有其他验证框架可以集成?
谢谢
1个回答

2
您的问题有一些混淆,需要我先澄清一下。
您似乎想要验证 WSDL(语法+WS-I)和 XSD,无论是嵌入式还是外部引用的。另一方面,您提到了 @SchemaValidation,实际上用于验证实例文档。
在传统的开发方法中,人们可能会说您至少想要验证设计时的工件(WSDL+XSD)。
针对这种情况,我建议您采取以下措施: WSDL:对于 WS-I 兼容性测试,请查看WS-I 网站的测试工具部分。他们的测试工具许可证如何与您的工具配合使用不太清楚,但至少它应该给您一个想法,如果它对您不起作用,可以找什么。
更新:其他 WSDL 验证资源: - 基于 Eclipse,如何在 Eclipse 之外使用。
XSDs: 如果您确实需要对XSD文件进行单独验证,那么对于生产质量的产品来说,事情可能会变得棘手;在这里WSDL4J并没有提供太多帮助,我认为XSOM是这种工作的最佳选择。您必须从类型部分中提取一个或多个XSD文件的内容(可能不止一个XSD文件,请查看一些示例,例如Microsoft的SharePoint WSDLs是一个很好的测试案例),为每个提取的XSD分配与WSDL位置相匹配的基本URI,然后使用XSOM对其进行验证。
由于您正在生成客户端,因此您很可能不关心验证HTTP标头(SOAP 1.1 / HTTP、SOAPAction是否与WSDL操作定义匹配)。如果您最终对此也产生兴趣,我称之为运行时验证,则建议您采用不同的方法布局(即,我不会依赖于@SchemaValidation,而是通过透明且通用的代理服务来执行验证)。

我提到了@SchemaValidation,只是为了避免实例和模式/ WSDL验证之间的混淆。正如你所说,我在询问设计时工件的验证。 关于WS-I网站,我查看了工具,可能会起作用,但我不确定许可证问题。 关于XSD,我们已经将其与WSDL分离,并支持多个嵌入式模式。我将调查如何使用XSOM验证这些内容。 至于您最后一点,我们也生成服务器,并验证这些标头可能很有趣。 感谢您的回复! - Denian
1
由于某些原因,经过快速查看许可文件,我觉得WS-I工具栈对于封闭或商业工具不太友好。我想指出这一点,以确保您也关注这些方面。在验证标头方面,我曾经看到客户端发送了正确的Soap主体但没有正确的SOAPAction的情况。另外,感谢您澄清,我对@SchemaValidation也是这样想的。 - Petru Gardea
是的,你说得对:http://netzooid.com/blog/2006/11/26/is-ws-i-open-look-at-their-test-license/ 我认为我们需要找到其他解决方案或框架。 关于验证XSDs,我已经尝试使用XSOMParser创建ErrorHandler,并且它运行良好。 我认为我应该保持这个问题开放,因为主要关注点是WSDL验证,但无论如何感谢你们的回复。 - Denian
请查看更新,Eclipse似乎有一个可以在Eclipse之外使用的验证器;然而,WS-I部分似乎不在那里... - Petru Gardea
嗨,就像我在第一篇帖子中说的那样,我们尝试使用Eclipse的验证器,但没有成功。我会再次尝试,并在这篇帖子中更新我的结果。 - Denian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接