我的 web 服务提供商给了我一个大的 WSDL 文件,但我们将只使用其中的几个函数。
我相信大型 WSDL 会对应用程序性能产生负面影响。
我们在客户端应用程序中使用 web 服务,启动时间和内存使用都是问题。大型 WSDL 意味着 jax-ws 将花费更长的时间来进行绑定,并且会为存根类占用更多内存。
我们是否可以将 WSDL 文件修整为轻量级版本?有没有为此目的的工具?
我认为我的网络服务提供商不会为我们生成另一个 WSDL。我们可能必须在构建脚本中自动完成。
我的 web 服务提供商给了我一个大的 WSDL 文件,但我们将只使用其中的几个函数。
我相信大型 WSDL 会对应用程序性能产生负面影响。
我们在客户端应用程序中使用 web 服务,启动时间和内存使用都是问题。大型 WSDL 意味着 jax-ws 将花费更长的时间来进行绑定,并且会为存根类占用更多内存。
我们是否可以将 WSDL 文件修整为轻量级版本?有没有为此目的的工具?
我认为我的网络服务提供商不会为我们生成另一个 WSDL。我们可能必须在构建脚本中自动完成。
简而言之,你的答案是“没有工具,但你可以 DIY”。
我希望有简单的工具可以做到这一点,因为我的 WSDL 包含太多未使用的函数和数据结构模式。
如果我可以自动化它,WSDL -> 修剪 WSDL -> 生成客户端存根类。不会生成任何未使用的东西,不会误用,不需要维护,我们不会触及生成的代码,我可以真正专注于正在使用的代码。更小的 JAR,更短的 XML 解析时间。如果 WSDL 得到更新,我只需重建客户端存根类并运行单元测试。
我试图远离人类的召唤。这需要时间,很容易出错,并且每次对原始 WSDL 的每一个小改动都必须重做。
我不熟悉 WSDL 模式。我在想它可以通过 XSLT 完成吗?
WSDL 的大小对性能的影响为零……除非您为每个请求下载和/或解析它。如果你在做后者,不要。它只需要在服务更改时进行处理,并且服务应该始终兼容地更改,并继续支持旧消息(至少在某些重叠时间段内)。
您应该考虑将 WSDL 处理为程序更改,并像处理任何版本一样进行处理,包括版本控制和测试等。
问题不在于 WSDL 本身的大小。重要的是生成代码的大小。例如,如果您使用 Axis2 从大型 WSDL 生成代码,您最终会为每个 WSDL 操作以及它们的返回类型的类创建一个请求/响应类。稍后您会得到一个巨大的存根类,这可能会影响性能,因为它会导入您不需要的 Web 服务操作所需的类。
没有简单的工具可以做到这一点。我通常使用记事本++来做到这一点,是的,你在做的时候总是会出错。
另一个常见的错误是选择同时生成 Sync 和 Async 风格的方法,而大多数时候(至少在我的情况下),您只会使用 Sync 风格的方法。这也可以显着增加存根的大小。
我没有使用您所说的工具,但是您可以成功执行 Web 服务方法,而无需代码接触 WSDL 文件。
这似乎是进行快速测试的好时机。从 WSDL 文件中删除所有内容,除了执行您计划使用的一种更简单的方法所需的内容。请改为引用该 WSDL 副本。如果成功了,你就知道下一步该做什么了!
无需修剪 WSDL。如果您打算走这条路,只需删除存根类中不需要的任何内容。只需确保在进行时对其进行测试,以确保一切正常。
您可以手动删除与您不需要的方法相对应的 <wsdl:operation> 元素,看看这是否足够。您应该能够在不触及文件其余部分的情况下删除这些元素。
如果您在编译时生成客户端存根类(例如通过 AXIS wsdl2java),则 WSDL的物理大小应该无关紧要。如果您正在下载 WSDL 并为每个请求解析它,那么下载时间可能会使解析时间相形见绌。如果下载时间成为问题,请考虑在本地缓存文件。如果解析时间成为问题,您可能需要考虑修剪文件或缓存已解析的对象。缓存或修剪文件时要小心,因为当您的提供者发布新的 WSDL 时,您需要集成任何更改。考虑在每次重新启动服务时或每隔一段时间更新缓存/修剪的 WSDL。