Domanda

Vorrei sapere se qualcuno può consigliare una buona libreria per generare stub di servizi web Java come client.

Attualmente sto usando un prodotto che ha incorporato un generatore che necessita solo del WSDL e quindi crea le classi e i metodi necessari.

Il mio problema è che genera avvisi e non crea alcun metodo per alcuni servizi Web che sto cercando di utilizzare.

Il vero problema è che non spiega quale sia il problema (quindi posso andare con il proprietario del servizio web e farlo modificare) né lasciarmi modificare l'uscita in modo da poter probabilmente risolvere il problema da solo.

Tuttavia, i proprietari dei servizi web (perché ciò accade con diversi ws diversi) dicono che il loro ws funziona bene e in realtà se uso soapUI funzionano davvero !!!

Ho dato una rapida occhiata alle librerie utilizzate da soapUI e mi sembra promettente.

So che c'è Axis che dovrebbe fare il lavoro, ma la mia preoccupazione è che il mio generatore in errore sta già utilizzando quella libreria (il che mi fa pensare che fallirà di nuovo)

E ultimamente non so se queste due librerie generano lo stub sorgente java o abbiano solo metodi come

Object [] args = ...;
service.inkvoke("updateCustomer", args );

Quando ciò che vorrei avere è qualcosa del tipo:

CustomerWs cws = ....
cws.updateCustomer(custId, custName, custAddress /*etc*/ );

Quindi, qualcuno ha un BUONO generatore di stub ws che può consigliare?

Sto per scrivere a mano il mio, ma ci vorranno sicuramente diversi giorni per essere accettabile

È stato utile?

Soluzione

Cosa stai usando attualmente? Uso Axis Wsdl2Java come compito di formica. Genera i tipi di tronchetti che desideri. Funziona alla grande, anche se impostare il percorso di classe per eseguire la build è stato un po 'una seccatura in Eclipse (c'erano una manciata di barattoli che avevo bisogno di rintracciare e includere). Nel mio buildfile di formica sembra così:

<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" />
<target name="foo">
<axis-wsdl2java
              output="${build.dir}"
              testcase="false"
              verbose="true"
              typemappingversion="1.2"
              url="http://ws.domain.com/url/of/WebService?wsdl" />
<!-- Compile, etc... -->
</target>

Altri suggerimenti

Fai molta attenzione quando fai riferimento a " Axis " ;: Apache Axis 1 è stato abbandonato in all'inizio del 2006 con bug di sicurezza dei thread che causano deadlock e giri della CPU (entrambi i quali abbiamo riscontrato). Ti pentirai profondamente di averlo usato. Apache Axis 2 è una riscrittura completa e può valere la pena dare un'occhiata. Ma ti suggerisco di dare prima un'occhiata a Apache CXF e Glassfish Metro .

Aggiornamento: ecco le segnalazioni di bug su deadlock e 100% di rotazione della CPU . Ecco la proposta da Cyrille Le Clerc di tre anni fa, mai impegnata.

Abbiamo eliminato deadlock e spin ricodificando il nostro client in Java semplice. E poi il server Axis ha rifiutato di parlare con noi, restituendo errori HTTP 500. Avevamo bisogno di affermare falsamente di essere un cliente dell'Asse per ottenere una risposta adeguata. L'interoperabilità SOAP non era una priorità per il team dell'Asse 1.

Mi piace Apache CXF: si integra perfettamente con Maven tramite un plug-in e funziona. Lo sto usando da un po 'per la generazione del codice stub del client e nell'ultima società in cui ho lavorato lo stavano usando anche per la parte server del WS.

Negli ultimi progetti su cui ho lavorato con CXF + Maven + Subversion, non abbiamo incluso le classi generate in Subversion, ma solo una copia del file WSDL - le classi stub sono state generate nel file " generate " obiettivo di Maven.

Apache Axis 2 è la strada da percorrere ... anche se potresti aver bisogno di giocare un po 'per farlo bene. È forse il modo più comune per farlo. Forse lo strumento che stai utilizzando si basa sull'asse 1?

Suggerirei sicuramente di utilizzare qualcosa basato su API basate su standard. Ciò significherebbe le API JAX-WS. Apache CXF e Metro sono le due principali implementazioni di JAX-WS, sebbene anche JBoss abbia un'implementazione. Axis2 ha un'implementazione non certificata, ma nessun supporto per la generazione del codice.

La parte migliore dell'utilizzo di un'API basata su standard è che se si verifica un problema con il prodotto, è possibile provare l'altro. In molti casi che ho visto, anche l'altro prodotto non funziona, ma emetterà un messaggio di errore diverso o simile che ha aiutato a diagnosticare il fatto che è davvero un problema nel nostro codice o wsdl.

Inoltre, JAX-WS è integrato in Java6. Se stai pianificando di funzionare su Java6, potresti usarlo e non avere a che fare con vasetti extra e simili.

L'ultima JAX-WS come parte della metropolitana ( http://metro.dev.java.net ) è un livello di astrazione piuttosto carino. Ci vuole un po 'di adattamento, ma per me è stato molto più intuitivo di alcune delle altre opzioni disponibili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top