Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Aiuto..... WebServices con axis2

    Ciao a tutti,

    è da molti giorni che sto sbattendo la testa su questo problema, diciamo anche che non sono molto pratico di webservices, ma purtroppo devo risolvere il problema.

    Vi espongo il problem:
    Devo realizzare un servizio che abbia in input un file due stringhe tre boolean e un intero, e in output un oggetto complesso che deve crearsi dai valori passati.
    La "prima fase" cioè qualla di passare i parametri non da nessun problema, che si crea invece quando il servizio deve restituirmi l'oggetto....non so cosa fare..non riesco neanche a trovare nessuna risorsa che mi possa aiutare....

    so che l'oggetto deve essere serializzato o comunque mappato...ma non so propio come fare anche perchè contiene un arrayList<mioOggetto>

    chiedo il vostro aiuto...su come procedere da cosa iniziare.....qualunque cosa...se devo utilizzare RPC o soap.....


    Grazie

  2. #2
    RCP o SOAP?!?
    Sono due cose distinti, l'uno non esclude l'altro anzi RPC può sfruttare SOAP. Ad esempio puoi effettuare una chiamata rpc tramite soap.
    Ma andiamo al dunque.

    Visto che la parte di invio dei parametri(presumo tu stessi usando RPC) ti riesce passo alla fase successiva che a quanto ho capito è quella che ti da problemi.
    Devi prevedere la registrazione di un nuovo type mapping per oggetti personalizzati (immagino ti interessi questo) sia su client che su server.
    Su client puoi farlo all'interno del codice, sul server invece puoi aggiungere poche righe al file di deploy.

    Presumendo che il tuo oggetto sia esistente e compilato e che abbia un nome tipo MioOggetto.class devi seguire questi passi:

    All'interno del codice del client, dopo aver creato un Service e un oggetto Call invochi il metodo registrerTypeMapping nel seguente modo:

    QName qn = new QName("urn:BeanServiceMioOggetto","MioOggetto");
    call.registerTypeMapping(MioOggetto.class,qn,new BeanSerializerFactory(MioOggetto.class,qn),new BeanDeserializerFactory(MioOggetto.class,qn));


    Poi apri il file di deploy (deploy.wsdd ad esempio, non so come l'hai chiamato) e digita le seguenti righe nella posizione indicata:


    <service name="nomeservizio" provider="tipodicomunicazione">
    <parameter name="className" value="nomedellaclassecheimplementailservizio"/>
    <parameter name="allowedMethods" value="*"/>
    ..............
    <beanMapping qname="myNS:MioOggetto" xmlns:myNS="urn:BeanServiceMioOggetto" languageSpecificType="java:MioOggetto"/>
    ....
    </service>

    ti riportato un pò di codice aggiuntivo che sarà ovviamente specifico al caso tuo. Le righe fonamentali sono quelle del tag <beanMapping>
    A questo punto prendi la class MioOggetto.class e la vai a copiare nella directory dei servizi...se usi Axis su Tomcat dovrebbe essere la seguente;

    $CATALINA_HOME/webapps/Axis/WEB-INF/classes/

    dove catalina è la home di Tomcat.

    Poi prelevi l'oggetto restituito così:
    MioOggetto obj = (MioOggetto)call.invoke(new Object[]{param1,param2,param3,..});

    dove invoke è il metodo che invoca il metodo rpc remoto fornito dal server.

    A questo punto dovrebbe funzionare salvo problemi aggiuntivi di diversa natura che si aggiungono alla serializzazione/deserializzazione dei tuoi oggetti.
    Sicuramente postando un pò di codice sarebbe meglio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.