2012-10-16 8 views

Odpowiedz

7

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.

+0

Twoje rady są bardzo pomocne. A twoja chęć pomocy ludziom oznacza znacznie więcej! Dziękuję Ci bardzo. – GaryX

+0

@GaryX serdecznie zapraszamy :). –

1

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