java - 如何从基于 WSDL 的 Web 服务中提取详细的架构信息?

标签 java xsd wsdl

假设我正在为一个已知的、基于 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/

相关文章:

wpf - 自动完成下拉列表 - 数据太多,超时

java - 多层企业应用程序中的 NBP 富客户端?

java - 使用 AsyncTask 作为内部类

java - 强制 GWT 假定 List 实现为 ArrayList

java - JAXB 不创建成员变量和 getter 和 setter

web-services - OpenESB CASA : Multiple operations in single WSDL

java - 可以从java 6编译的代码调用java 7编译java代码

c# - 针对 XSD 验证 XML 的最高效方法

范围之间的 XML 限制数,但有异常(exception)

wcf - 为什么我无法查看 WCF 服务的 WSDL 内容?