【问题标题】:Generating java code from wsdl using cxf gives code too large error使用 cxf 从 wsdl 生成 java 代码会导致代码太大错误
【发布时间】:2013-04-01 06:32:56
【问题描述】:

我已经使用 cxf 2.7.3 生成了从 wsdl 到 java 的代码,但是在构建程序集时出现“代码太大”错误。表示其中一种方法已超过 java 64kb 限制。我确切地知道哪个类,对我来说这似乎是 cxf 中的错误。 Actully Axis2 也是如此,所以我想知道是否有人知道如何解决这个问题。

我正在使用的代码在路径 eco-api-ex /examples / java / 中提供 here

如何强制代码生成拆分大型生成方法?还是我应该为此使用一些外部工具?

[ERROR] \workspace\e-conomics\target\generated\src\main\java\com\e_conomic\Econo
micWebServiceSoap_EconomicWebServiceSoap12_Client.java:[34,23] error: code too l
arge

【问题讨论】:

  • 那个 WSDL 文档有多大
  • 你自己看看..它很长api.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl我正在尝试集成到这个服务..我的第二个想法是下载并带走我不需要的东西..
  • 这种文件的下载应该伴随着经典的蠕虫音效:“传入!”

标签: java web-services wsdl code-generation cxf


【解决方案1】:

不要使用 -client 标志运行 wsdl2java。 _Client.java 类只是一个示例类,用于展示如何使用生成的服务类和代理等。它通常不需要任何东西。那应该是唯一一个用这样的大方法生成的类。

【讨论】:

  • 我应该说我已经删除了它,我正在运行最新的 cxf,我还尝试了 Axis2。 Axis 走得更远,但在第 68608 行爆炸了 :),说“代码太大”。我只是想整合的不是我的 wsdl 或服务。
  • 如果你删除了它,那么你应该有一个新的错误或类名。该错误将不再出现在 Econo micWebServiceSoap_EconomicWebServiceSoap12_Client.java 中,因为不会生成该错误。你能更新新位置吗?
  • 实际上我从 wsdl (3mb->2.4mb) 中删除了我不需要的东西来编译它,一切都很好。我来为您的请求发布第二个错误,但这次它只适用于整个 3mb wsdl。我所做的不同之处在于在本地拥有 WSDL。您提到的任何 -client 标志以及我之前尝试过的任何方式都会导致问题以及在本地没有它,这对有类似问题的人有好处。
【解决方案2】:

那里有一个 3MB 的 WSDL 文档。 (难怪我的浏览器在我试图查看那个大小的通用 XML 文档时有点不高兴。)它定义了大约 3000 个元素;还有 3k 条消息和 4.5k 次操作。我不确切知道你在什么地方达到了极限(在一些地方构建了特定类型的所有实体的注册表),但这并不重要。对于大多数代码来说,它太大了,无法正常处理。 (您达到的限制似乎是方法的字节码总大小的限制;达到该限制通常表明其他地方出现严重错误:在这种情况下,它是破坏地堡的 WSDL 文档。)

构建一个包含更少元素、消息和操作的精简版本将是一个绝妙的主意。将该精简版本放入 Maven 可以找到的存储库中(例如,在 src/main/wsdl 中)也很有意义,因为它会阻止您在每次构建时再次下载该 3MB 文档。

【讨论】:

  • 我知道,我希望这里有灵丹妙药,编辑一个 3000 元素的 wsdl 有多有趣?明天他们编辑他们的 api,突然又什么都没有了..希望不要走手动蛮力之路..
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多