2009-08-31 32 views
11

Esiste un'alternativa ad Axis2? O il modo di farlo funzionare (diversi dati vincolanti, per esempio)?Il wsdl2java di Axis2 non funziona sui servizi Web in stile RPC/codificato

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 

NOTA: Apache CXF non riesce così :(

risposta

9

Ci sono solo 3 opzioni che ho trovato che possono essere utilizzati in Java per il vecchio stile RPC/servizi Web codificate:

1) implementazione di riferimento di JAX-RPC di SUN (wscompile)

2) di WebLogic clientgen (ho usato 8.1 versione)

3) Axis1 v1.4 WSDL2Java

Inizialmente abbiamo usato Axis 1.4 per questo e ha mostrato prestazioni piuttosto scadenti su risposte di servizio relativamente grandi (> 20k), ovvero il tempo di elaborazione del client è aumentato più del doppio rispetto alla semplice richiesta HTTP senza analisi. E il tempo cresce se la risposta aumenta. Ci sono voluti più di 30 anni per deserializzare 1MB di grande respiro.

client generato del sole non hanno funzionato e non è riuscito a richiesta con il messaggio:

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

Ho provato con 8.1 clientgen di WebLogic, e il codice cliente rispetto al Axis 1.4 generato le prestazioni del cliente. E Axis ha vinto la gara. .. Quindi, anche se cliente Axis non è eseguendo che il bene in relativamente grandi risposte che ancora è l'opzione migliore là fuori per vecchi RPC servizi web/codificati :(

+0

Puoi mostrare come farlo esattamente? Quando eseguo 'java -classpath path/to/axis-1_4/lib/org.apache.axis.wsdl.WSDL2Java' Ho ottenuto un' Errore: impossibile trovare o lo ad main class org.apache.axis.wsdl.WSDL2Java' –

+0

Uomo, era 6 anni fa :). Il tuo errore indica che hai problemi con il classpath. –

1

Prova Asse 1, ho usato per questo motivo esatto

+0

Sì, usiamo asse 1 in questo momento, actualy. Ma abbiamo riscontrato problemi di performance :(. Conosci altre alternative all'Axis 1 o 2 o Apache CXF? –

+0

Hai provato XFire o JbossWS? –

1

ho avuto problemi con SimpleDataBinding in axis2 anche io.. li risolto utilizzando l'opzione AxisDataBinding. Quale è il peso po 'più pesante dal punto di vista di codifica, ma funziona dopo tutto.

ADB in detail

Inoltre, sono d'accordo con Robert, affermando che anche l'asse 1 è un'opzione interessante.

0

Non ho intenzione di entrare in profondità con questo, ma dal momento che lei ha chiesto di alternative:

Java 6 SE e Java EE 5 nave con l'attuazione (di riferimento) Metro JAX-WS.

Vive nello spazio dei nomi javax.xml.ws.

La rete di sviluppatori Sun ha un articolo Introducing JAX-WS 2.0 With the Java SE 6 Platform che potrebbe essere utile.

Detto questo, Eclipse non è molto JAX-WS friendly.

+0

Sarei felice di usare JAX-WS, ma JAX-WS lo fa non supporta i servizi Web in stile rpc/encoded E non posso cambiare il servizio web :(, ma ho bisogno di un client per questo. –

+0

Dovrei supporre che JAX-RPC non funzioni, quindi? – Powerlord

+0

Ho provato ad usare JAX -Implementazione di riferimento RPC e wscompile Dopo aver scaricato tutti i jar che SUN non includeva nella normale distrubtion, sono riuscito a generare il client, ma non è riuscito con eccezione: * Causato da: nome elemento inaspettato: expected = getSubscriberInfoReturn, actual = {http : //ws.generated.api} getSubscriberInfoReturn –

0

Questo problema si solleva se lo stile di codifica soap è vecchio axis2 wsdl2java o wsimport non può comprendere il vecchio stile di codifica RPC , quindi utilizzare l'asse 1.4 o versione precedente dell'asse lo svuotamento è che non troverai wsdl2java come uno strumento nel vecchio asse invece lo troverai come un file di classe nel file jar dell'asse quindi devi impostare manualmente un classpath e usare quella classe

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

0

È possibile aggiungere seguente parametro per wsdl2java comando

-d xmlbeans