使用大型wsdl,我们可以修剪它吗?
-
03-07-2019 - |
题
我的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。