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




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/">
В последнем дистрибутиве Axis 1.4 у меня разные имена jar-файлов, а mail-1.4.jar нет. Не работает как есть. (Я перешел по вашей ссылке Axis 1.0)
вам нужно будет добавить его явно .mail-1.x.jar и activate-1.x.jar
Я попробовал ваш метод и получил «java.net.ProtocolException: сервер перенаправлен слишком много раз», что, вероятно, связано с тем, что я пытаюсь выполнить импорт из веб-службы, требующей аутентификации, как я могу справиться с аутентификацией, используя ваш метод?
Я удалил атрибут use = encoded из <soap: body>, и wsimport больше не жаловался и генерировал артефакты из wsdl. Это правильный подход? Или это будет иметь какое-то влияние.
@Albert, для maven см. Мой пост ниже
Может быть, это поможет с 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.
Распакуйте его, и у вас должны быть следующие файлы (среди прочих):
Выполните 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 и добавьте их в команду.
Добавьте 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
просто извлечь и выполнить 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 в конфигурации никоим образом не указывал на него ".
Есть ли в Интернете документация по этой проблеме?