【问题标题】:How to pull detailed schema info from a WSDL based web service?如何从基于 WSDL 的 Web 服务中提取详细的模式信息?
【发布时间】:2013-02-14 19:36:07
【问题描述】:

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

有没有一种方法可以在 runtime 时根据 WSDL 中的 inline 架构验证各种字段(例如字符串长度不超过限制)?

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

【问题讨论】:

  • 由于它是“运行时”,因此指定运行客户端的平台很重要。我假设您正在考虑在将代码发送到服务器之前验证其输出?
  • 客户端的平台可以是 Windows 和 Linux。客户端是用 Java 编写的。是的,我正在考虑在将代码发送到服务器之前验证它的输出。谢谢!
  • Axis2 有一个将执行验证的客户端生成器。如果您希望 WSDL 发生变化,那么应该可以动态调用生成器并使用生成的客户端。

标签: java xsd wsdl


【解决方案1】:

如果您想让它真正动态化,那么您必须假设您可以访问 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 之类的东西,那么诸如 this one 之类的帖子将告诉您如何解决您的问题,以及您到底在做什么需要验证。如果您不使用 JAXB,那么请探索您的 API 在做什么,以及它实际上如何允许您插入验证...

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

【讨论】:

  • 感谢您提供如此出色的答案,包括安全方面。我倾向于采纳您的第二条建议:“在设计时获取 XSD,并将它们作为资源捆绑到我的 Jar 文件中,与客户端代码一起使用”
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多