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>
Ответ 4
Ответ Chase Serbeit работал у меня. И вот ссылки, которые я нашел во всей библиотеке, которую он упомянул:
Ответ 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