Java: Rpc / закодированные 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 или что-нибудь еще, чтобы исправить это?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
58
0
69 088
6

Ответы 6

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

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

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

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

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

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

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

Есть ли в Интернете документация по этой проблеме?

Ganesh 10.08.2011 17:09

В последнем дистрибутиве Axis 1.4 у меня разные имена jar-файлов, а mail-1.4.jar нет. Не работает как есть. (Я перешел по вашей ссылке Axis 1.0)

рüффп 13.04.2012 17:35

вам нужно будет добавить его явно .mail-1.x.jar и activate-1.x.jar

nikhil 21.10.2015 07:49

Я попробовал ваш метод и получил «java.net.ProtocolException: сервер перенаправлен слишком много раз», что, вероятно, связано с тем, что я пытаюсь выполнить импорт из веб-службы, требующей аутентификации, как я могу справиться с аутентификацией, используя ваш метод?

Neo 10.05.2016 17:43

Я удалил атрибут use = encoded из <soap: body>, и wsimport больше не жаловался и генерировал артефакты из wsdl. Это правильный подход? Или это будет иметь какое-то влияние.

G.S.Tomar 29.07.2017 06:12

@Albert, для maven см. Мой пост ниже

Foyta 16.10.2018 00:57

Может быть, это поможет с 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>

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

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

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

  • axis.jar
  • Commons-Discovery-0.2.jar
  • Commons-logging-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.

Сообщается об отсутствии двух классов, что приводит к отключению поддержки вложений. Чтобы исправить это, загрузите mail.jar и activate.jar и добавьте их в команду.

Marco Borchert 06.08.2014 17:22

Добавьте mailapi.jar и activate.jar, как заявил @Marco Brochet. Я использовал -classpath и заменил ";" с участием ":". java -classpath axis.jar: commons-logging-1.0.4.jar: commons-discovery-0.2.jar‌: jaxrpc.jar: saaj.jar‌: wsdl4j-1.5.1.jar: ma‌ ilapi.jar: activate .Jar org.apache.axis.wsdl.WSDL2Java api.clickatell.com/soap/webservice.php?WSDL

Cedric Simon 12.08.2014 18:08

просто извлечь и выполнить 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

Если кто-то захочет использовать maven: (плюс здесь некоторая информация о стилях привязки WSDL)

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>axistools-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                    <configuration>
                        <!-- Use your .wsdl location here-->
                        <sourceDirectory>${basedir}/src/main/resources/wsdl</sourceDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<!-- Here the libraries that you need to call the Axis WS client -->
<dependencies>
    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis-jaxrpc</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>commons-discovery</groupId>
        <artifactId>commons-discovery</artifactId>
        <version>0.5</version>
    </dependency>
    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis-wsdl4j</artifactId>
        <version>1.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis-saaj</artifactId>
        <version>1.4</version>
    </dependency>
    <!-- activation+mail: To stop Axis generating WARNING about "Attachment support being disabled" -->
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
</dependencies>

Вот что со мной случилось (старый wsdl в той же папке): https://www.damirscorner.com/blog/posts/20180831-CodeGenerationWithMavenCxfPlugin.html

"Очевидно, что-то другое вызывало проблему для плагина Maven. После долгих проб и ошибок я наконец дошел до сути. В той же папке был еще один файл WSDL, и он был для RPC / буквального Интернета. service. Плагин завершился неудачно, потому что он пытался обработать его, хотя полный путь к моему пути WSDL в конфигурации никоим образом не указывал на него ".

Другие вопросы по теме