Apache CXF WSDLToJava Ошибка: операция уже существует.Как обойти? - PullRequest
1 голос
/ 29 октября 2010

Я занимаюсь разработкой второго клиентского приложения, которое использует существующие веб-сервисы SOAP.Я генерирую Java из существующего WSDL, используя последнюю версию Apache CXF 2.3

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>

а) Действительно ли оно считается ошибочным по некоторым стандартам?Какой?

б) Есть ли способ обойти это и создать скаффолдинг Java для остальных?Ничего подобного не упоминается на веб-странице CXF WSDL to Java tool , кроме -autoNameResolution, которая не помогает.

1 Ответ

2 голосов
/ 29 октября 2010

Это специально запрещено профилем WSI-Basic.Если вы посмотрите:

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

Раздел 4.5.3, в нем конкретно говорится:

Перегрузка имени операции в wsdl: portType запрещена Профилем.

Я не думаю, что есть способ обойти это в CXF, поскольку операции хранятся в карте, привязанной к QName.Поскольку QNames не будут уникальными, на карте может быть сохранена только одна операция.

...