2

假设我正在为已知的、基于 WSDL 的 Web 服务(我无法获得其源代码)开发客户端:

有没有一种方法可以在运行时根据该 WSDL 中的内联模式验证各种字段(例如字符串长度不超过限制)?

如果是这样,我如何与该 Web 服务交互以获取其内联 XSD 信息?

4

1 回答 1

2

如果您想让它真正动态化,那么您必须假设您可以访问 WSDL 的 URI,以及 WSDL 可能使用的所有其他外部引用,以及其他 WSDL 文件和/或 XSD 文件。

第一步,您必须将文件下载到临时文件夹,或为这些 URI 创建 I/O 流以在内存中加载,以加载模式(javax.xml.validation.Schema)。我不知道有一个 Java API 可以使这项任务变得简单(从 WSDL 参考中获取一个模式,例如 .NET 平台上的开发人员可以使用的模式)——希望如果有的话,有人可能会加入。否则,它写一个应该不难。

我必须警告您,许多人可能会将此(加载外部 URI,尤其是指向 Internet 的 URI)视为生产环境中的安全问题,因此请注意您的设计。由于您说的是“已知的、基于 WSDL 的 Web 服务”,我可能会在设计时获取 XSD,并将它们作为资源捆绑在我的 Jar 文件中,这些文件将与客户端代码一起使用。

下一件事是如何创建 XML……假设您正在使用诸如 JAXB 之类的东西,那么像这篇文章这样的文章将给出如何解决您的问题的想法,以及您需要验证什么。如果您不使用 JAXB,请探索您的 API 在做什么,以及它实际上如何允许您插入验证......

我希望这至少可以让您了解此类问题所需的详细信息,以获得更具体的答案。

于 2013-02-14T20:20:29.783 回答