【问题标题】:Apache CXF WSDLToJava Error: operation already exists. How to bypass?Apache CXF WSDLToJava 错误:操作已存在。如何绕过?
【发布时间】:2010-10-29 06:08:10
【问题描述】:

我正在开发使用现有 SOAP Web 服务的第二个客户端应用程序。 我使用最新的 Apache CXF 2.3 工具从现有的 WSDL 生成 Java

wsdl2java -client -ant http://172.20.0.22/someletters/TradingServer.asmx?WSDL

得到

WSDLToJava 错误:java.lang.IllegalArgumentException:此服务中已存在名称为 [{urn:someschema:TradingServer}GetTradeSummary] 的操作

这是有逻辑的,因为在查看 WSDL 文件时,您可以看到 2 个类似的操作 GetTradeSummary,但使用不同的 soapAction。

<wsdl:operation name="GetTradeSummary">
  <soap:operation soapAction="urn:someschema/GetTradeSummary" style="document" />
  <wsdl:input>
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output>
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTradeSummary">
  <soap:operation soapAction="urn:someschema/GetTradeSummary_Open" style="document" />
  <wsdl:input name="GetTradeSummary_Open">
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output name="GetTradeSummary_Open">
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>

a) 它真的以某种标准被认为是错误的吗?哪一个?

b) 有没有办法绕过这个并为其余部分生成 Java 脚手架? CXF WSDL to Java tool web page 没有提到这样的内容,除了 -autoNameResolution 没有帮助。

【问题讨论】:

标签: wsdl cxf wsdl2java


【解决方案1】:

WSI-Basic Profile 明确禁止这样做。如果你看:

http://www.ws-i.org/profiles/basicprofile-1.1.html

第 4.5.3 节,它特别指出:

配置文件不允许 wsdl:portType 中的操作名称重载。

我认为在 CXF 中没有办法解决它,因为操作存储在以 QName 为键的 Map 中。由于 QName 不是唯一的,因此地图中只能存储一个操作。

【讨论】:

  • 那么b)有没有办法,即跳过第二次错误发生并继续生成代码?
  • 在生成之前不能简单的从wsdl中删除操作元素吗?
猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2014-12-12
  • 2011-01-13
相关资源
最近更新 更多