Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:32 Der er 20 kommentarer og
1 løsning

WebService underlig opførsel

Hej

Jeg har lavet en webservice i Java og deployer den igennem en Tomcat server. Jeg er nu stødt ind i et, synes jeg, underligt problem.

Problemet går ud på, at jeg skal have returneret et array af egne objekter.
Dette fungerer fint, hvis det kun er arrayet jeg sender retur, men jeg har brug for at sende flere oplysninger med. Derfor wrapper jeg det ind i en simpel klasse, som har en reference til dette array, samt supplerende oplysninger i form af strings og integers.
Når jeg returnere dette wrapper objekt og prøver at hente arrayet ud, er der kun ét element i arrayet - nemlig det sidst tilføjede. Hvordan kan det være???

Altså:

Kun array sendes retur - virker fint
Wrapperobjekt indeholdende array - virker ikke

Nogle forslag?
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:35 #1
Hvis det har interesse kan wsdl filen ses her:

http://mimo.dyndns.dk:8080/PrepModule/services/PraeparatService?wsdl
Avatar billede arne_v Ekspert
04. december 2004 - 15:38 #2
Er din wrapper klasse en ægte bean ?
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:41 #3
Det skal jeg ikke kunne svare på - hvad afgør det?

Her ses min wrapper klasse:

package webservice;

public class PraeparatInfoWrap
{
  public PraeparatInfo[] preps;
  public String errorMsg; // Errormsg vil være sat i tilfælde af ingen varer / updates eller ugyldig login
  public long version;
}
Avatar billede erikjacobsen Ekspert
04. december 2004 - 15:41 #4
Vi kan ikke se den. Din Linksys router er på port 8080
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:43 #5
Og du kan da også lige få PraeparatInfo:

package webservice;

public class PraeparatInfo
{
  // Præparat specifik oplysning
  public int id;
  public String name;
  public String description;
  public String unit;
  public double price;

  public LeverandoerInfo leverandoer;
  public VaregruppeInfo varegruppe;

  // Objekt state information
  public long version;
  public boolean deleted = false;
}


Jeg troede, at så længe det bare var public variable, så kunne man sagtens bruge sådan en klasse i forbindelse med en webservice?
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:46 #6
>> ericjacobsen

Argh - det havde jeg ikke lige tænkt over... Så må jeg lige se om jeg kan finde ud af at komme uden om det.
Avatar billede arne_v Ekspert
04. december 2004 - 15:47 #7
Hm. Det er jo klasser med ene public fields.

Bruger du Axis ?

Jeg har altid brugt beans (private fields + get & set) og så angivet
BeanSerializer & ArratSerializer.
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:51 #8
Ja, jeg bruger axis.
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:52 #9
Og så skulle der gerne være hul igennem til wsdl...
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:53 #10
Er det mere korrekt at gøre brug af beans? Og hvordan skulle jeg i så fald gøre?
Avatar billede mikkelbm Nybegynder
04. december 2004 - 15:55 #11
Kan måske lige nævne, at jeg bruger JBuilder 2005 til at lave den her webservice med.
Avatar billede arne_v Ekspert
04. december 2004 - 15:56 #12
Jeg ved ikke om det er mere korrekt.

Jeg har bare altid brugt det.

http://www.eksperten.dk/artikler/159 har et eksempel til sidst.
Avatar billede arne_v Ekspert
04. december 2004 - 15:57 #13
Keg er stadigvæk på JBuilder 9, men umiddelbart skulle jeg ikke tro at det gjorde
nogen forskel at tingene blev genereret af JBuilders wizard.
Avatar billede mikkelbm Nybegynder
04. december 2004 - 16:02 #14
Jeg kigger lidt på det, og vender tilbage senere.
Avatar billede mikkelbm Nybegynder
04. december 2004 - 16:41 #15
Det var alligevel utroligt. Det hjalp dæleme at lave mine klasser om til beans med get og set metoder... Underligt efter min mening!

Men smid et svar Arne - du kom jo med det rigtige løsningsforslag!
Avatar billede arne_v Ekspert
04. december 2004 - 16:45 #16
svar
Avatar billede mikkelbm Nybegynder
04. december 2004 - 16:45 #17
Jeg synes bare at have læst et sted, at man kun kunne sende klasser med public fields over en webservice. Det var godt nok C#, men gik ud fra at det var det samme i Java.
Avatar billede arne_v Ekspert
04. december 2004 - 16:47 #18
Jeg tror faktisk at det må være en fejl i Axis, men måske har de ikke testet
kun public felter fordi man jo som oftest bruger private felter og public get og set.
Avatar billede arne_v Ekspert
04. december 2004 - 16:47 #19
I C# ville jeg også bruge private fields og public properties
Avatar billede mikkelbm Nybegynder
04. december 2004 - 16:48 #20
Okay... Så huskede jeg bare forkert. Tak for hjælpen!
Avatar billede arne_v Ekspert
04. december 2004 - 16:50 #21
Det virker sikkert med public fields i C#.

Jeg ville bare alligevel encpasulate dem i properties.
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