Chcę wiedzieć, czy mogę umieścić metodę rodzajowych w JAX-WS, jak:Co dzieje się z klasą ogólną w usłudze jax-ws?
public List<MyCustomClass> getSomething()
Czy JAX-WS obsługuje to? Po stronie klienta, jak będzie wyglądać powrót metody?
Chcę wiedzieć, czy mogę umieścić metodę rodzajowych w JAX-WS, jak:Co dzieje się z klasą ogólną w usłudze jax-ws?
public List<MyCustomClass> getSomething()
Czy JAX-WS obsługuje to? Po stronie klienta, jak będzie wyglądać powrót metody?
Otrzymasz listę po stronie klienta (lub tablicę obiektów MyCustomClass, jeśli konsument WS jest napisany w innym języku). To nie będzie problem. Pamiętaj, aby zawsze programować do interfejsów.
Wygląda na to, że nadal nie ma dużo praktyki tworzenia WS w Javie, więc dam ci kilka rad:
Ty nie musi wysłać 2 lub więcej obiektów, które zawiera odwołanie cykliczne lub zakończysz z okrężnymi problemami referencyjnymi. Dzieje się tak, ponieważ narzędzie JAX-WS utworzy nieskończoną odpowiedź XML dla żądania. To może być bardzo trudne do odkrycia. Zobaczmy przypadek:
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!
}
}
Ty musi mieć zawsze interfejsy w swoich klasach w obie strony, a nie konkretnych klas biblioteki Java. Oznacza to, że twoje klasy powinny mieć List
,i (w przypadku kontenerów), ponieważ interfejsy te znajdują się na wyższym poziomie niż klasy implementacji, a użytkownik może napotkać problemy, jeśli klient inny niż Java spróbuje użyć metody usługi sieciowej.
public class ClassC {
List<ClassA> lstClassA; //good!
ArrayList<ClassB> alstClassB; //not very flexible with other languages =\
}
Klasy, które przejdą przez swoich usług internetowych powinien być POJOs (Plain Old Java Object), a nie usługa lub ćwiczenia warstwie logiki biznesowej. Czemu? Ponieważ w komunikowaniu się z klientami zostaną przekierowane/usunięte tylko wartości atrybutów, nie będzie zawierał kodu metody w umowie z usługą sieci 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);
}
}
mam do czynienia te trzy problemy w moim ostatnim projekcie SOA z Java. Mam nadzieję, że inni ludzie mogliby ulepszyć tę odpowiedź lub podać informacje z linkami.
Twoje rady są bardzo pomocne. A twoja chęć pomocy ludziom oznacza znacznie więcej! Dziękuję Ci bardzo. – GaryX
@GaryX serdecznie zapraszamy :). –
Tak, to nie powinno stanowić problemu, ale zalecane jest używanie macierzy w trybie . Jak wspomniał Luiggi, otrzymasz numer List<MyCustomClass>
. Aby dodać więcej, można znaleźć pełną listę obsługiwanych typów przez JAX-WS here
thx, to magia – GaryX