Domanda

È possibile con Axis2 ed Eclipse generare un client del servizio Web e utilizzarlo con i tipi Java già presenti nei pacchetti anziché crearne i propri. Il motivo è ovviamente che se ho già creato il tipo A e crea il proprio tipo A, non posso semplicemente assegnare una variabile di tipo A a una variabile di tipo B.

Il wsdl viene generato da un servizio Web distribuito su un server delle applicazioni. Se non è possibile generarlo da questo sarebbe possibile generare un client dai file java già esistenti.

È stato utile?

Soluzione

Se si desidera veramente riutilizzare le classi esistenti, è possibile chiamare direttamente l'API Axis2 senza generare un client utilizzando wsdl2java. Di seguito è riportato un codice relativamente semplice per chiamare un servizio Web. Devi solo compilare l'endpoint del servizio web, il metodo QName, le classi di ritorno attese e gli argomenti per il servizio. È possibile riutilizzare le classi esistenti come valori o argomenti di ritorno.

Se il tuo servizio web è piuttosto complicato, potresti scoprire che devi approfondire l'API per far funzionare questo approccio.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

Altri suggerimenti

Stai generando il client del servizio web da wsdl, giusto?

L'unica cosa che lo strumento wsdl2java conosce sono le informazioni in wsdl, quindi non conoscerà i tipi che hai già creato.

Se riesci a ottenere le informazioni sul tipo nel wsdl, potresti farlo funzionare, anche se non ho mai provato.

Se desideri un modo semplice per copiare dal Tipo A al Tipo B, puoi provare BeanUtils.copyProperties , purché i setter e i getter di tipo A e tipo B corrispondano.

praticamente la maggior parte dei progetti di servizi web Java passano attraverso questo. Non so se il mondo .NET / C # abbia una soluzione più elegante.

Ha senso, come ha detto Mike, usare BeanUtils.copyProperties.

BR,
~ A

Se usi eclipse come ide, vale a dire che devi: http: //www.eclipse. org / WebTools / . Fa al di là di altre cose esattamente quello che vuoi.

È possibile utilizzare direttamente la classe ServiceClient per chiamare il servizio Web, che fornisce chiamate utilizzando solo XML e restituisce una risposta XML. Per diversi metodi di servizio Web, è necessario convertire la risposta XML in alcuni POJO Java per usarlo. Solo la gestione della risposta deve essere eseguita alla fine. che puoi fare da XML a Map ecc ...

Quindi non avrai bisogno di altre classi stub per chiamare qualsiasi servizio web, devi solo gestire l'XML di risposta. Puoi convertire XML in POJO usando le librerie Castor o JAXB.

Questo è il modo in cui non è necessario modificare il client ogni volta per diff. servizi web. Puoi sviluppare come fornire un gestore di risposta al client esternamente. In modo che per ogni diverso servizio web avrai diff. classe del gestore della risposta che è l'implementazione della tua interfaccia.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

di riferimento:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on-the-client-Side.htm

http: // www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

Grazie.

www.techlads.com

Nel caso in cui questo post sia ancora utile a qualcuno, ho letto la guida ai clienti che generano axis2: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Sembra che il plugin Axis2 Eclipse sia configurato per chiamare la generazione del codice ADB in modalità integrata (vedi http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), creando così classi interne nello stub del servizio Web. Non so se è possibile cambiare la modalità di generazione in modalità estesa (generare classi di dati al di fuori della classe stub), ma puoi farlo da riga di comando usando Wsdl2Java:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

L'opzione -u indica al generatore di codice ADB di creare classi di dati come classi separate e non classi interne nello stub.

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