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

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

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

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

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

有帮助吗?

解决方案

简而言之,你的答案是<!>“;没有工具,但你可以DIY <!>”。

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

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

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

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

其他提示

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

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

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

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

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

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

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

无需修剪WSDL。如果您已经开始沿着这条路走下去,只需删除您不需要的存根类中的任何内容。只要确保在进行测试时确保一切正常。

你可以手动删除<!> lt; wsdl:operation <!> gt;对应于您不需要的方法的元素,看看是否足够。您应该能够删除这些元素而不触及文件的其余部分。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top