2009-08-31 6 views
11

Existe-t-il une alternative à Axis2? Ou la façon de le faire fonctionner (liaison de données différentes, par exemple)?Le wsdl2java d'Axis2 échoue sur les services Web de style RPC/codé

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 

REMARQUE: Apache CXF échoue aussi bien :(

Répondre

9

Il n'y a que trois options que j'ai trouvé qui peuvent être utilisés en Java pour l'ancien style rpc/services Web codées:

1) la mise en œuvre de référence de SUN de JAX-RPC (WSCOMPILE)

2) de WebLogic clientgen (I utilisé version 8.1)

3) Axis1 v1.4 wsdl2java

A l'origine, nous utilisions Axis 1.4 pour cela et il affichait des performances médiocres sur des réponses de service relativement importantes (> 20k), c'est-à-dire que le temps de traitement du client augmentait plus de deux fois. Et le temps se développe si la réponse devient plus grande. Il a fallu plus de 30 secondes pour désérialiser 1MB grand respose.

le client généré SUN ne fonctionne pas vraiment et il a échoué sur demande avec le message:

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

J'ai essayé d'utiliser 8.1 clientgen de WebLogic et code client par rapport à l'axe 1.4 généré des performances du client. Et Axis a gagné la course. .. Donc, même si le client Axis effectue pas bon sur les réponses relativement importantes, il est toujours la meilleure option là-bas pour les anciens rpc/services web encodées :(

+0

Pourriez-vous montrer comment faire cela précisément? En cours d'exécution 'java -classpath chemin/vers/axe-1_4/lib/org.apache.axis.wsdl.WSDL2Java' J'ai un' Erreur: Impossible de trouver ou de localiser ad main class org.apache.axis.wsdl.WSDL2Java' –

+0

Homme, c'était il y a 6 ans :). Votre erreur indique que vous avez des problèmes avec votre chemin de classe. –

1

Essayez Axe 1, je l'ai utilisé pour cette raison exacte

+0

Oui, nous utilisons Axe 1 au moment, actualy. Mais nous avons rencontré des problèmes de performance avec cela :(. Connaissez-vous d'autres alternatives à l'Axe 1 ou 2 ou Apache CXF? –

+0

Avez-vous essayé XFire ou JbossWS? –

1

J'ai eu des problèmes avec SimpleDataBinding dans axis2 aussi je.. résolu les en utilisant l'option de AxisDataBinding. Ce qui est dans une perspective de codage poids peu plus lourd, mais fonctionne après tout.

ADB in detail

En outre, je serais d'accord avec Robert, indiquant que axis1 est une option intéressante aussi.

0

Je ne vais pas entrer en profondeur, mais puisque vous avez demandé des alternatives:

Java 6 SE et Java EE 5 navire avec la mise en œuvre Metro JAX-WS (de référence). Il réside dans l'espace de noms javax.xml.ws.

Sun's Developer Network a un article Introducing JAX-WS 2.0 With the Java SE 6 Platform qui pourrait être utile.

Après avoir dit tout cela, Eclipse n'est pas très JAX-WS friendly.

+0

Je serais heureux d'utiliser JAX-WS, mais JAX-WS fait Je ne peux pas changer le service web: et je ne peux pas changer le service Web :(, mais j'ai besoin d'un client pour cela –

+0

Dois-je supposer que JAX-RPC ne fonctionne pas non plus, alors? – Powerlord

+0

J'ai essayé d'utiliser JAX -RPC implémentation de la référence et wscompile.Après avoir téléchargé tous les jars que SUN n'a pas inclus dans la distrubtion normale, j'ai réussi à générer le client, mais il a échoué avec exception: * Causé par: nom de l'élément inattendu: expected = getSubscriberInfoReturn, actual = {http : //ws.generated.api} getSubscriberInfoReturn –

0

Cette question soulève si le style de codage de savon est vieux axe2 wsdl2java ou wsimport ne peut pas comprendre l'ancien style de codage RPC donc utilisez l'axe 1.L'ancienne version de l'axe l'inconvénient est que vous ne trouverez pas wsdl2java comme un outil dans l'ancien axe à la place, vous le trouverez comme un fichier de classe dans le fichier jar de l'axe donc vous devez définir manuellement le classpath et utiliser cette classe

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

0

Vous pouvez ajouter le paramètre suivant pour wsdl2java commande

-d xmlbeans 
Questions connexes