2009-08-31 10 views
11

Czy istnieje alternatywa dla Axis2? Lub sposób, aby to działało (na przykład różne powiązanie danych)?Wsdl2java w Axis2 kończy się niepowodzeniem w usługach internetowych w stylu RPC/Encoded

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 

UWAGA: apache cxf nie za dobrze :(

Odpowiedz

9

Istnieją tylko 3 opcje, które znalazłem, które mogą być stosowane w Javie na starym stylu RPC/zakodowany usług internetowych:

1) realizacja odniesienia Sun. JAX-RPC (wscompile)

2) WebLogic clientgen (I) stosuje się wersję 8.1

3) oś1 v1.4 wsdl2java

Początkowo używaliśmy do tego celu Osi 1.4 i wykazało ono dość niską wydajność w relatywnie dużych odpowiedziach serwisowych (> 20k), tj. Czas przetwarzania klienta wzrósł ponad dwukrotnie w porównaniu do zwykłego żądania HTTP bez analizowania. A czas rośnie, gdy reakcja staje się większa. Potrwało to ponad 30 sekund po deserializacji 1 MB dużego respose.

generowane SUN klient tak naprawdę nie działa i nie udało się na zamówienie z komunikatem:

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

Próbowałem przy użyciu WebLogic 8.1 clientgen, aw porównaniu kod klienta do Osi 1.4 generowane wydajność klienta. A Axis wygrał wyścig. .. Tak więc, mimo że klient Axis nie wykonując że dobrze na stosunkowo dużych odpowiedziach nadal jest najlepszym rozwiązaniem tam dla starych RPC/zakodowany usług internetowych :(

+0

Czy mógłbyś pokazać, jak to zrobić dokładnie? Podczas uruchamiania 'java -classpath path/to/axis-1_4/lib/org.apache.axis.wsdl.WSDL2Java' dostałem' Błąd: nie można znaleźć lub lo ad główna klasa org.apache.axis.wsdl.WSDL2Java' –

+0

Mężczyzna, to było 6 lat temu :). Twój błąd oznacza, że ​​masz problemy ze ścieżką klas. –

1

Spróbuj Oś 1, użyłem go na dokładnym tego powodu

+0

Tak, używamy Oś 1 w tej chwili właściwie. Ale napotykamy na problemy z wydajnością :(Czy znasz jakieś inne alternatywy dla Osi 1 lub 2 lub Apache CXF? –

+0

Czy próbowałeś XFire lub JbossWS? –

1

miałem problemy z SimpleDataBinding w axis2 zbyt i.. rozwiązać je za pomocą opcji AxisDataBinding. Która jest nieco więcej wagi ciężkiej z perspektywy kodowania, ale działa po wszystkim.

ADB in detail

Ponadto zgadzam się z Robertem, stwierdzając, że oś 1 jest również interesującą opcją.

0

ja nie zamierzam się dogłębnie z tym, ale skoro pytasz alternatyw:

Java 6 SE i Java EE 5 statków z (odniesienia) realizacja Metro JAX-WS.

Mieszka w przestrzeni nazw javax.xml.ws.

Sieć programistów firmy Sun ma artykuł Introducing JAX-WS 2.0 With the Java SE 6 Platform, który może być przydatny.

Powiedziawszy to wszystko, Eclipse nie jest bardzo JAX-WS friendly.

+0

Byłbym szczęśliwy z używania JAX-WS, ale JAX-WS robi nie obsługuje usług internetowych w stylu PPC/kodowanych i nie mogę zmienić usługi sieciowej :(, ale potrzebuję do tego klienta.) –

+0

Należy założyć, że JAX-RPC również nie działa, to? – Powerlord

+0

Próbowałem używać JAX Implementacja referencyjna -RPC i wscompile Po pobraniu wszystkich słoików, których SUN nie zawierał w normalnym trybie distrubtion, udało mi się wygenerować klienta, ale nie udało się z wyjątkiem: * Przyczyną: nieoczekiwana nazwa elementu: expected = getSubscriberInfoReturn, actual = {http : //ws.generated.api} getSubscriberInfoReturn –

0

Ten problem powstaje, jeśli styl kodowania mydła jest stary oś2 wsdl2java lub wsimport nie może zrozumieć starego stylu kodowania RPC , więc użyj osi 1.4 lub starsza wersja osi cofa się, że nie znajdziesz wsdl2java jako narzędzia w starej osi zamiast tego znajdziesz je jako plik klasy w pliku JAR osi , więc musisz ręcznie ustawić ścieżkę klasy i użyć że klasa

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

0

Możesz dodać następujący parametr dla wsdl2java polecenia

-d xmlbeans