Java: Rpc/encoded wsdls не поддерживаются в JAXWS 2.0

Я использую CXF 2.1 для генерации java-кода из wsdl, но я получаю следующую ошибку:

WSDLToJava Error: Rpc/encoded wsdls are not supported in JAXWS 2.0

org.apache.cxf.tools.common.ToolException: Rpc/encoded wsdls are not supported in JAXWS 2.0
    at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.checkSupported(JAXWSDefinitionBuilder.java:141)
    at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.java:87)
    at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.java:61)
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:127)
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:232)
    at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:83)
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:103)
    at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:173)

Как исправить эту ошибку, могу ли я использовать предыдущую версию CXF или что-нибудь еще, чтобы ее исправить?

Ответ 1

RPC/encoded является остатком до того, как объекты SOAP были определены с помощью XML-схемы. Это больше не поддерживается. Вам нужно будет сгенерировать заглушки, используя Apache Axis 1.0, который относится к той же эпохе.

java org.apache.axis.wsdl.WSDL2Java http://someurl?WSDL 

В параметре -cp classpath вам понадобятся следующие банки или эквиваленты:

  • Ось-1.4.jar
  • Обще-каротаж 1.1.ja
  • Обще-открытие-0.2.jar
  • JAXRPC-1.1.jar
  • SAAJ-1.1.jar
  • wsdl4j-1.4.jar
  • активация-1.1.jar
  • почты 1.4.jar

Это приведет к созданию аналогичных заглушек для wsimport.

В качестве альтернативы, если вы не используете части схемы, которые требуют rpc/encoded, вы можете загрузить копию WSDL и прокомментировать эти биты. Затем запустите wsimport против локального файла.

Если вы посмотрите на WSDL, следующие биты используют rpc/encoded:

<soap:body use="encoded"
           encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

Ответ 2

Я использовал Axis 1.4 в качестве Chase Seibert в его ответе, хотя ссылка на скачивание, указанная в этом ответе, не работает. Альтернативная ссылка для загрузки, которую я использовал, давала мне разные библиотеки. Ниже приведены шаги, которые я выполнил для генерации моего кода.

Перейдите в http://apache.is.co.za/axis/axis/java/1.4/ и загрузите axis-bin-1_4.zip.

Извлеките его, и у вас должны быть следующие файлы (среди прочих):

  • axis.jar
  • Обще-открытие-0.2.jar
  • Обще-каротаж 1.0.4.jar
  • jaxrpc.jar
  • saaj.jar
  • wsdl4j-1.5.1.jar

Выполните WSDL2Java, используя следующую команду (заменив URL-адрес, конечно):

java -cp axis.jar;commons-logging-1.0.4.jar;commons-discovery-0.2.jar;jaxrpc.jar;saaj.jar;wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java http://someURL?WSDL

Это создаст ваши файлы Java.

P.S.: Это, похоже, работает одинаково хорошо с помощью Axis 1.2.1.

Ответ 3

Возможно, это поможет с CXF. Alteast это сработало для меня. Я отредактировал файл WSDL и удалил все ссылки SOAP-ENC и создал тип ArrayOfString ниже

<xsd:complexType name="ArrayOfString">
    <xsd:sequence>
      <xsd:element minOccurs="0" maxOccurs="unbounded" name="String" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

Ответ 5

просто извлечь и выполнить WSDL2Java? используя следующую команду (заменив URL-адрес, конечно):

java -cp axis.jar;commons-logging-1.0.4.jar;commons-discovery-0.2.jar;jaxrpc.jar;saaj.jar;wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java http://someURL?WSDL