Si otterrà una lista nel lato client (o una matrice di oggetti MyCustomClass se il consumer WS è scritto in un'altra lingua). Quello non sarà un problema. Ricordarsi di programmare sempre le interfacce.
Sembra che tu ancora non hai molta pratica la creazione di WS in Java, quindi ti darò alcuni consigli:
È non devi inviare 2 o più oggetti che contiene un riferimento circolare , o terminerai con problemi di riferimento circolari. Questo perché lo strumento JAX-WS creerà una risposta XML interminabile per la richiesta. Potrebbe essere molto difficile da scoprire. Vediamo un caso:
public class ClassA {
ClassB instanceOfB;
//getters and setters...
}
public class ClassB {
ClassA instanceOfA;
//getters and setters...
}
public class MyJAXWS {
@WebMethod
public ClassA getClassA() {
ClassA classA = new ClassA();
ClassB classB = new ClassB();
classB.setInstanceOfA(classA);
classA.setInstanceOfB(classB);
return classA; //boom! circular reference problems!
}
}
È deve sempre hanno interfacce nelle classi ritorno, non specifiche classi della libreria Java. Questo significa che le tue classi dovrebbero avere List
, Set
e Map
(nel caso di contenitori), perché queste interfacce sono di livello superiore rispetto alle classi di implementazione e potresti ottenere problemi se un client non Java tenta di utilizzare il tuo metodo di servizio web.
public class ClassC {
List<ClassA> lstClassA; //good!
ArrayList<ClassB> alstClassB; //not very flexible with other languages =\
}
Le classi che andranno attraverso i servizi web dovrebbero essere POJO (Plain Old Java Objects), non il servizio o classi livello di logica business. Perché? Poiché solo i valori degli attributi verranno sottoposti a marshalling/unmarshalled durante la comunicazione con i client, non verrà visualizzato alcun codice del metodo nel contratto del servizio Web.
public class ClassD {
private int intValue;
//naive business logic method
//won't be generated in the WSDL for the clients/consumers of the Web Services
public void printIntValue() {
//pretty simple implementation
System.out.println(this.intValue);
}
}
Ho affrontato questi tre problemi nel mio ultimo progetto SOA con Java. Spero che altre persone possano migliorare questa risposta o fornire informazioni con link.
fonte
2012-10-16 05:57:16
thx, questa è la magia – GaryX