Avatar billede kjole Nybegynder
31. marts 2007 - 15:40 Der er 12 kommentarer og
1 løsning

Kan man overføre en ArrayList igennem webservices?

Jeg har uden held forsøgt at overføre en ArrayListe igennem webservice, er dette muligt?
Avatar billede arne_v Ekspert
31. marts 2007 - 15:48 #1
det mener jeg, men er ret formålsløst (en web service bruges til at lave et
teknologi neutralt interface - et .NET eller PHP program kan
ligesom ikke bruge en java.util.ArrayList til noget)

løsningen er simpel: du konverterer din ArrayList til et array af samme type
og returnerer det i.s.f. - alle sprog understøtter arrays
Avatar billede kjole Nybegynder
31. marts 2007 - 15:54 #2
Okay det kan jeg sagtens forstå logikken i, da jeg egentlig kun skal bruge Listen på serversiden.

Jeg har prøvet på denne måde:

    ArrayList<PStation> lstPStations = new ArrayList<PStation>();
   
    public SAP() {
        lstPStations.add(new PStation(1,"Klostertorv","Kirkegade 14a", 25));
        lstPStations.add(new PStation(2,"Klostertorv","Kirkegade 14b", 24));
        lstPStations.add(new PStation(3,"Klostertorv","Kirkegade 14c", 23));
        lstPStations.add(new PStation(4,"Klostertorv","Kirkegade 14d", 22));
    }
    public PStation[] getP() {
        PStation[] outArray = lstPStations.ToArray();
        return outArray;
    }

Som giver følgende fejl:

symbol  : method ToArray()
location: class java.util.ArrayList<TTSS.PStation>
        PStation[] outArray = lstPStations.ToArray();
                                                  ^
1 error
Avatar billede arne_v Ekspert
31. marts 2007 - 16:03 #3
.toArray()
Avatar billede arne_v Ekspert
31. marts 2007 - 16:04 #4
nok endda

PStation[] outArray = (PStation[])lstPStations.toArray();
Avatar billede kjole Nybegynder
31. marts 2007 - 16:46 #5
I C# applikationen som er forbundet til services kommer følgende fejl når jeg konventerer ArrayListen til et array:

java.lang.ClassCastException: [Ljava.lang.Object;

Ved denne metode virker det ikke:

    public PStation[] getP() {   
        PStation[] outArray = (PStation[])lstPStations.toArray();     
        return outArray;
    }

Her virker det som det skal:

    public PStation[] getP() {
        PStation[] liste1 = new PStation[3];
        liste1[0] = new PStation(1,"Klostertorv1","Kirkegade 14a1", 251);
        liste1[1] = new PStation(2,"Klostertorv2","Kirkegade 14a2", 252);
        liste1[2] = new PStation(3,"Klostertorv3","Kirkegade 14a3", 253);
        return liste1;
    }

Der burde da ikke være nogen forskel mellen disse løsninger?
Avatar billede kjole Nybegynder
31. marts 2007 - 17:51 #6
Jeg har fundet ud af hvilken exception der bliver kastet:
[Ljava.lang.Object;
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

Underligt..
Avatar billede kjole Nybegynder
31. marts 2007 - 18:03 #7
Og stadig hvis jeg gør:

PStation[] outArray = {};
lstPStations.toArray(outArray);
Avatar billede arne_v Ekspert
31. marts 2007 - 18:41 #8
indeholder lstPStations det som den skal ?
Avatar billede kjole Nybegynder
31. marts 2007 - 19:02 #9
Ja det gør den. Fik det løst på en grim måde, og kan ikke forstå hvorfor de tidligere forsøg ikke virkede.
Her kan det ses hvordan jeg fik det løst:

public PStation[] getP() {   
    PStation[] outArray = new PStation[lstPStations.size()];
    lstPStations.toArray(outArray);   
    return outArray;
}

Arne_v -> Som altid har du været rigtig god til at hjælpe, tak for det, hvis du vil smide et svar har du fået lidt ekstra point i kassen:)
Avatar billede kjole Nybegynder
31. marts 2007 - 19:30 #10
Er det egentlig muligt at lave en form for adgangsbeskyttelse af en webservie vha. login eller ligende?
Avatar billede arne_v Ekspert
31. marts 2007 - 19:56 #11
svar
Avatar billede arne_v Ekspert
31. marts 2007 - 19:58 #12
ja

der er flere forskellige modeller:
1) send brugernavn/password med hvert kald
2) maintain session mellem kald og login med brugernavn/password kun som første kalde
3) brug WSS og digital signature
Avatar billede kjole Nybegynder
31. marts 2007 - 20:15 #13
Tak for det! Tror bare jeg tager denne lette løsning, nummer 1, da det kun er en skoleopgave:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester