假设我正在为一个已知的、基于 WSDL 的 Web 服务开发客户端(我无法获得该服务的源代码):
有没有一种方法可以在运行时基于该 WSDL 中的内联模式验证各种字段(例如,字符串长度不超过限制)?
如果是这样,我如何与该 Web 服务交互以获取其内联 XSD 信息?
最佳答案
如果您想让它真正动态化,那么您必须假设您可以访问 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 正在做什么,以及它实际上如何允许您插入验证...
我希望这至少能让您了解此类问题所需的详细信息,以获得更具体的答案。
关于java - 如何从基于 WSDL 的 Web 服务中提取详细的架构信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882665/