Java 使用大型wsdl时,我们可以对其进行修剪吗?

Java 使用大型wsdl时,我们可以对其进行修剪吗?,java,web-services,wsdl,jax-ws,Java,Web Services,Wsdl,Jax Ws,我的Web服务提供者给了我一个大的WSDL文件,但我们将只使用其中的一些函数 我认为大型WSDL对应用程序性能有负面影响 我们在客户端应用程序中使用webservice,启动时间和内存使用是问题。 大型WSDL意味着jax ws将花费更长的时间进行绑定,并且将为存根类占用更多的内存 我们是否可以将WSDL文件裁剪为轻量级版本?是否有用于此目的的工具 我认为我的Web服务提供商不会为我们生成另一个WSDL。我们可能必须在构建脚本中自动执行它,我没有使用您所说的工具,但是您可以成功地执行web服务方

我的Web服务提供者给了我一个大的WSDL文件,但我们将只使用其中的一些函数


我认为大型WSDL对应用程序性能有负面影响

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

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


我认为我的Web服务提供商不会为我们生成另一个WSDL。我们可能必须在构建脚本中自动执行它,我没有使用您所说的工具,但是您可以成功地执行web服务方法,而无需代码触及WSDL文件


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

不需要修剪WSDL。如果要沿着这条路走下去,只需删除存根类中不需要的任何内容。只需确保在运行过程中对其进行测试,以确保一切正常。

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

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

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


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

< P>简而言之,您的答案是“没有工具,但可以DIY”。 我希望有简单的工具可以做到这一点,因为我的WSDL包含了太多未使用的函数和数据结构模式

如果我可以自动化它,WSDL->trimmed WSDL->生成客户机存根类。没有未使用的将被生成,没有误用,没有维护需要,我们将不会涉及生成的代码,我可以真正集中在代码中使用。JAR越小,XML解析时间越短。如果WSDL得到更新,我只需重建客户机存根类并运行单元测试

我试着远离人类。这需要时间,很容易出错,并且每次对原始WSDL进行小的更改时都必须重做


我不熟悉WSDL模式。我在想,XSLT可以做到这一点吗?

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

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


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

如果您的WSDL有许多数据结构,这不是一件有趣的工作,也很容易出现人为错误。“我相信大型WSDL会对应用程序性能产生负面影响。”--我很确定这不是真的。你有什么证据?此外,我假设WSDL是指嵌入了模式的WSDL。您可以手动编辑WSDL,然后将其保存在本地,并在客户端中引用WSDL的本地副本。您好,我有这个问题,首先,在使用“wsimport”生成存根后,我删除了所有未调用的操作,从而修剪了给定的WSDL文件,我有一个异常,抱怨不匹配:WSDL portType中的操作名称与SEI或Web服务实现类中的方法名称不匹配。在那之后,我尝试为整个WSDL生成存根,这次由于JAX-WS中缺少RPC编码支持而导致生成失败。你有什么建议吗?谢谢