使用大型wsdl,我们可以修剪它吗?

我的webservice提供者给了我一个大的WSDL文件,但是我们将只使用一些函数。

我相信大型WSDL会对应用程序性能产生负面影响。

我们在客户端应用程序中使用webservice, 启动时间内存使用是问题。 大型WSDL意味着jax-ws需要更长时间才能进行绑定,并且将为stub类占用更多内存。

是否有可能将WSDL文件修剪为轻量级版本? 有没有用于此目的的工具?

我认为我的webservice提供程序不会为我们生成另一个WSDL。 我们可能必须在构建脚本中自动执行此操作

简而言之,您的答案是“没有工具,但您可以DIY”。

我希望有一个简单的工具可以做到这一点因为我的WSDL包含太多未使用的函数和数据结构模式。

如果我可以自动化它,WSDL – >修剪WSDL – >生成客户端存根类。 不会产生任何未使用的,没有误用,不需要维护,我们不会触及生成的代码,我可以真正专注于使用的代码。 更小的JAR,更短的XML解析时间。 如果WSDL得到更新,我将只需要重建客户端存根类并运行unit testing。

我试图避开人类援引。 这需要时间,容易出错,并且每次在原始WSDL上进行每次微小更改时都必须重做。

我不熟悉WSDL架构。 我在想是否可以通过XSLT完成?

我没有使用您正在讨论的工具,但您可以成功执行Web服务方法,而代码不会触及WSDL文件。

这似乎是进行快速测试的好时机。 从WSDL文件中删除所有内容,除了您需要执行计划使用的一种更简单的方法。 请改为引用该WSDL的副本。 如果它有效,你知道接下来该做什么!

无需修剪WSDL。 如果您打算沿着这条路走下去,只需删除您不需要的存根类中的任何内容。 只要确保在你去的时候测试它,以确保一切仍然有效。

您可以手动删除与您不需要的方法对应的元素,看看是否足够。 您应该能够删除这些元素而不触及文件的其余部分。

如果在编译时生成客户端存根类 (例如,通过AXIS wsdl2java) ,则WSDL的物理大小无关紧要。如果您正在下载WSDL并为每个请求解析它,那么下载时间可能会使解析时间相形见绌。 如果下载时间成为问题,请考虑在本地缓存文件。 如果解析时间成为问题,您可能需要考虑修剪文件或缓存已解析的对象。 在缓存或修剪文件时要小心,因为当您的提供者发布新的WSDL时,您需要集成任何更改。 每次重新启动服务或以某个时间间隔时,请考虑更新缓存/修剪的WSDL。

WSDL的大小对性能没有任何影响……除非您正在下载它和/或为每个请求解析它。 如果你正在做后者,不要。 它只需在服务更改时进行处理,并且服务应始终兼容地更改,并继续支持旧消息(至少在某些重叠时间段内)。

您应该考虑将WSDL处理为程序更改,并按照任何版本,版本控制和测试等方式进行处理。

问题不在于WSDL本身的大小。 重要的是生成的代码的大小。 例如,如果您使用Axis2从大型WSDL生成代码,您最终将为每个WSDL操作创建一个Request / Response类,以及它们的返回类型的类。 您最终会得到一个巨大的存根类,这可能会影响性能,因为它会导入您不需要的Web服务操作所需的类。

没有简单的工具可以做到这一点。 我通常使用记事本++来做到这一点,并且在做这件事时你总是会犯错误。

另一个常见错误是选择生成Sync和Async样式方法,大多数时候(至少在我的情况下),您只使用Sync样式方法。 这也可以大大增加存根的大小。