PDA

View Full Version : [J2EE] Axis: passaggio array ?


Slide
16-01-2007, 13:52
ho un problema nella mia piccola applicazione e credo proprio che sia
riconducibile alla serializzazione
di un array in soap.Il fatto è che l'array ritorna dal server della
lunghezza giusta, ma ogni singolo elemento mi risulta null :_(

In particolare, ho una classe Portafoglio che rappresenta un comunissimo
bean:
variabili private (tutte intere o stringhe) e i metodi set e get per
accedervi.
Il web service offre un metodo che dovrebbe ritornare un array di
Portafoglio.

Portafoglio [] portafogli = chiamataAlWS.getTuttiPortafogli(...)

Mi sono affidato al tool WSDL2Java per creare stub,skeleton, file
deploy.wsdd e undeploy.wsdd.
Ho notato che nel file deploy.wsdd vi è, tra le altre cose, il tag type
mapping (utile proprio per risolvere la serializzazione dei tipi complessi,
giusto? ).

Potreste farmi capire dove sbaglio? Cosa do per scontato? Quali passaggi ho
trascurato :(
Dalla guida di Axis non sono riuscito a trovare la soluzione.

Se serve vi condivido il file wsdl e le classi bean (od ogni altra cosa
utile per risolvere il problema).

Auguro un buon proseguimento a tutti.

:)

lovaz
16-01-2007, 13:56
Forse dico una stupidaggine, ma Portafoglio e' serializzabile?

Slide
16-01-2007, 15:16
Forse dico una stupidaggine, ma Portafoglio e' serializzabile?

Il bean da me fatto non è serializzabile. Però quando uso il WSDL2Java per creare stub,skeleton etc.. mi ricrea anche Portafoglio.java che implementa Serializable. Inoltre mi aggiunge due costruttori: quello vuoto di default, ed uno che prende tutte le variabili da associare alle mie private. Per capirci:


public class Portafoglio implements java.io.Serializable {
private int ID;

private java.lang.String created;

private int id;

private java.lang.String nome;

private java.lang.String owner;

private java.lang.String valuta1;

private java.lang.String valuta2;

public Portafoglio() {
}

public Portafoglio(
int ID,
java.lang.String created,
int id,
java.lang.String nome,
java.lang.String owner,
java.lang.String valuta1,
java.lang.String valuta2) {
this.ID = ID;
this.created = created;
this.id = id;
this.nome = nome;
this.owner = owner;
this.valuta1 = valuta1;
this.valuta2 = valuta2;
}


/**
* Gets the ID value for this Portafoglio.
*
* @return ID
*/
public int getID() {
return ID;
}


/**
* Sets the ID value for this Portafoglio.
*
* @param ID
*/
public void setID(int ID) {
this.ID = ID;
}


/**
* Gets the created value for this Portafoglio.
*
* @return created
*/
public java.lang.String getCreated() {
return created;
}

....


Il codice è tagliato per semplicità di lettura.

Cmq. sia rieseguo l'ennesima prova perchè ho trovato un punto che non mi convince molto.

Grazie per l'aiuto.


:muro:

Slide
19-01-2007, 14:15
Altro che informatica.. qui siamo nella pura magia :)
Ho eseguito gli stessi passi sul portatile. Lo scambio di messaggi soap va a buon fine e il client preleva e stampa i dati correttamente.

Sul fisso, invece, ho sempre il problema di avere un array della lunghezza giusta ma di dati null ! :muro:
Ad esempio, se chiedo al server di mandarmi tutti i libri affittati da un tizio (ad esempio 2):

Libri [] lib = server.getTuttiLibri("Alfredo");
System.out.println(lib.length); // mi stampa correttamente 2

ma lib[0] risulta = null ed anche lib[1] ! :eek:

Non riesco a capire perchè caspita sul portatile mi riesce a riempire correttamente l'array mentre sul pc-desktop non va :(

:doh:

Slide
19-01-2007, 15:36
Altro che informatica.. qui siamo nella pura magia :)
Ho eseguito gli stessi passi sul portatile. Lo scambio di messaggi soap va a buon fine e il client preleva e stampa i dati correttamente.

Sul fisso, invece, ho sempre il problema di avere un array della lunghezza giusta ma di dati null ! :muro:
Ad esempio, se chiedo al server di mandarmi tutti i libri affittati da un tizio (ad esempio 2):

Libri [] lib = server.getTuttiLibri("Alfredo");
System.out.println(lib.length); // mi stampa correttamente 2

ma lib[0] risulta = null ed anche lib[1] ! :eek:

Non riesco a capire perchè caspita sul portatile mi riesce a riempire correttamente l'array mentre sul pc-desktop non va :(

:doh:

Per i posteri:

Trovatoooooooooooo!!!! :sofico:
Roba da impiccarsi! :eek:
L'errore è nel deploy.wsdd generato automaticamente dal tool WSDL2Java. Chissà perchè sul portatile viene generato correttamente mentre sul desktop no. :eek:
Per ora non me ne frega nulla... già è tanto che possa proseguire col progettino.

Ciauuuu