Сбой Axis2 в wsdl2java на веб-сервисах в стиле RPC / Encoded - PullRequest
11 голосов
/ 31 августа 2009

Есть ли альтернатива Axis2? Или способ заставить его работать (например, другое связывание данных)?

Retrieving document at '...'.
Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
        at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
        at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:224)
        ... 2 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
        ... 3 more
Caused by: org.apache.axis2.schema.SchemaCompilationException: can not find type {http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema ...        at org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1296)
        at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1258)
        at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1153)
        at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1097)
        at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)
        at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:931)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:766)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:552)
        at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:1991)
        at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1874)
        at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1081)
        at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)
        at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:931)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:766)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:552)
        at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:1991)
        at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1874)
        at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1081)
        at org.apache.axis2.schema.SchemaCompiler.processAnonymousComplexSchemaType(SchemaCompiler.java:980)
        at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:934)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:592)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:563)
        at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:370)
        at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:280)
        at org.apache.axis2.schema.ExtensionUtility.invoke(ExtensionUtility.java:103)
        ... 8 more

ПРИМЕЧАНИЕ. Apache CXF также не работает: (

Ответы [ 8 ]

9 голосов
/ 03 сентября 2009

Я нашел только 3 варианта, которые можно использовать в Java для веб-сервисов старого стиля rpc / encoded:

1) эталонная реализация SUN JAX-RPC ( wscompile )

2) клиент WebLogic (я использовал версию 8.1)

3) Axis1 v1.4 wsdl2java

Первоначально для этого мы использовали Axis 1.4, и он показал довольно низкую производительность при относительно больших откликах службы (> 20 КБ), т. Е. Время обработки клиента увеличилось более чем в два раза по сравнению с обычным HTTP-запросом без анализа. И время увеличивается, если ответ становится больше. Потребовалось более 30 секунд, чтобы просто десериализовать 1 МБ большого размера.

Сгенерированный клиент SUN на самом деле не работал, и по запросу произошел сбой с сообщением:

unexpected element name: 
   expected=getSubscriberInfoReturn, 
   actual={ws.generated.api}getSubscriberInfoReturn

Я попытался использовать 8.1 clientgen в WebLogic и сравнил код клиента с производительностью клиента, созданной в Axis 1.4. И Осьй выиграл гонку. Таким образом, несмотря на то, что клиент Axis работает не так хорошо при относительно больших ответах, он все же является лучшим вариантом для старых веб-сервисов с кодировкой RPC: (.

4 голосов
/ 26 июля 2010

Кодировка RPC не поддерживается на Axis2. Источник: http://wiki.apache.org/ws/StackComparison

1 голос
/ 31 августа 2009

У меня тоже были проблемы с SimpleDataBinding в axis2. Я решил их с помощью Опция AxisDataBinding. Что немного тяжелее с точки зрения кодирования, но работает в конце концов.

АБР в деталях

Кроме того, я бы согласился с Робертом, заявив, что axis1 тоже интересный вариант.

1 голос
/ 31 августа 2009

Попробуйте Axis 1, я использовал его именно по этой причине.

0 голосов
/ 19 марта 2019

Ответный пост на soapenc.xsd найден здесь Clickatell SOAP wsdl для классов JAXB Java помог мне.

Я использовал утилиту wsdl2java для axis1.5, мы получили похожую ошибку в массиве.

Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
            at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
            at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
    Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
            at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:224)
            ... 2 more
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
            ... 3 more
    Caused by: org.apache.axis2.schema.SchemaCompilationException: can not find type {http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema ....
            at org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1296)
            at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1258)
            at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1153)
            at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1097)
            at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)

Я попытался обновить свой файл wsdl, создав файл soapenc.xsd с содержимым с сайта 'http://schemas.xmlsoap.org/soap/encoding/'. Как показано ниже, это действительно сработало для меня.

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1= .. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns=.. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace=..>
<types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace=.. xmlns:ns1=.. xmlns:ns2=.. xmlns:tns=.. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
</types>
<import location="soapenc.xsd" namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<message name="Input">
    <part name=../>
</message>
<message name="Output">
    <part name=../>
</message>
<portType name=".."> .. </portType>
<binding name="..." type="tns:"..">
    <operation name="...">          ..          </operation>
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
</binding>
<service name="...">
    <port binding="tns:..." name="...">         <soap:address location="..."/>      </port>
</service>

0 голосов
/ 22 июня 2016

Вы можете добавить следующий параметр для wsdl2java команды

-d xmlbeans
0 голосов
/ 26 июля 2013

Эта проблема возникает, если стиль кодирования мыла старый axis2 wsdl2java или wsimport не может понять старый стиль кодирования RPC поэтому используйте ось 1.4 или более старую версию оси недостаток в том, что вы не найдете wsdl2java в качестве инструмента на старой оси вместо этого вы найдете его как файл класса в файле оси JAR поэтому вы должны вручную установить classpath и использовать этот класс

D: \ axis-1_4 \ lib> java -classpath \ axis-1_4 \ lib * org.apache.axis.wsdl.WSDL2Java urwsdl

0 голосов
/ 31 августа 2009

Я не буду вдаваться в подробности, но так как вы попросили альтернативы:

Java 6 SE и Java 5 EE поставляются с реализацией Metro JAX-WS (справка).

Он живет в пространстве имен javax.xml.ws.

В Sun Developer Network есть статья Представляем JAX-WS 2.0 с платформой Java SE 6 , что может быть полезно.

Сказав все это, Eclipse не очень JAX-WS дружественный .

...