【问题标题】:Working with large wsdl, can we trim it?使用大型 wsdl,我们可以修剪它吗?
【发布时间】:2010-09-28 23:10:24
【问题描述】:

我的网络服务提供商给了我一个大的 WSDL 文件,但我们将只使用其中的几个函数。

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

我们在客户端应用程序中使用网络服务,启动时间内存使用是问题。 大型 WSDL 意味着 jax-ws 将花费更长的时间来进行绑定,并且会为存根类占用更多内存。

我们是否可以将 WSDL 文件修剪为轻量级版本?是否有任何工具可用于此目的?

我认为我的 Web 服务提供商不会为我们生成另一个 WSDL。我们可能必须在构建脚本中自动完成

【问题讨论】:

  • "我认为大型 WSDL 会对应用程序性能产生负面影响。" ——我很确定这不是真的。你有什么证据证明这一点?另外,我假设 WSDL 是指嵌入了架构的 WSDL..?
  • 您可以手动编辑 WSDL,然后将其保存在本地,并在客户端引用 WSDL 的本地副本。

标签: java web-services wsdl jax-ws


【解决方案1】:

我没有使用过您所说的工具,但是您可以成功地执行 Web 服务方法,而无需代码接触 WSDL 文件。

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

【讨论】:

  • 如果你的 WSDL 有很多数据结构,这不是一件有趣的工作,而且很容易出现人为错误。
【解决方案2】:

无需修剪 WSDL。如果您打算走这条路,只需删除存根类中不需要的任何内容。只需确保在使用时对其进行测试,以确保一切正常。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        您应该考虑将 WSDL 处理为程序更改,并像处理任何版本一样进行处理,包括版本控制和测试等。

        【讨论】:

          【解决方案6】:

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

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

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

          我试图远离人类的召唤。这需要时间,容易出错,并且每次对原始 WSDL 的每一个小改动都必须重做。

          我不熟悉 WSDL 模式。我在想它可以通过 XSLT 来完成吗?

          【讨论】:

          • 嗨,我有这个问题,起初,我通过删除所有我不调用的操作来修剪给定的 WSDL 文件,在我使用“wsimport”生成存根之后,我有一个异常抱怨关于不匹配:WSDL portType 中的操作名称与 SEI 或 Web 服务实现类中的方法名称不匹配。之后我尝试为整个 WSDL 生成存根,这次生成失败是因为 JAX-WS 中缺少 RPC 编码支持。你有什么建议吗?谢谢!
          【解决方案7】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2022-11-12
            • 1970-01-01
            • 1970-01-01
            • 2020-09-18
            • 2019-05-27
            • 2012-07-20
            • 1970-01-01
            • 2016-11-15
            • 2017-02-01
            相关资源
            最近更新 更多