2012-10-16 3 views

Antwort

7

Sie erhalten eine Liste auf der Clientseite (oder ein Array von MyCustomClass Objekte, wenn der WS-Consumer in einer anderen Sprache geschrieben wird). Das wird kein Problem sein. Denken Sie daran, immer auf Schnittstellen zu programmieren.

Sieht aus wie Sie noch WS nicht viel Praxis haben in Java zu schaffen, also werde ich Ihnen einige Ratschläge geben:

  • Sie darf nicht senden 2 oder mehr Objekte, die einen zirkulären Verweis enthält oder Sie enden mit zirkulären Referenzproblemen. Dies liegt daran, dass das JAX-WS-Tool eine unendliche XML-Antwort für die Anforderung erstellt. Es könnte sehr schwer zu entdecken sein. Mal sehen, einen Fall:

    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! 
        } 
    } 
    
  • Sie müssen immer haben Schnittstellen in Ihren Return-Klassen, keine spezifische Java-Bibliothek Klassen. Das bedeutet, dass Ihre Klassen List, Set und Map (im Fall von Containern) haben sollten, da diese Schnittstellen eine höhere Ebene als die Implementierungsklassen haben und Sie Probleme bekommen könnten, wenn ein Nicht-Java-Client versucht, Ihre Webdienstmethode zu verwenden.

    public class ClassC { 
    
        List<ClassA> lstClassA; //good! 
        ArrayList<ClassB> alstClassB; //not very flexible with other languages =\ 
    } 
    
  • Die Klassen, die durch Ihren Web-Service gehen sollten POJOs (Plain Old Java Objects), nicht warten oder Business-Logik-Schicht Klassen sein. Warum? Da bei der Kommunikation mit den Clients nur die Attributwerte gemarshallt/unmarshaliert werden, wird im Vertrag Ihres Web-Service kein Methodencode angezeigt.

    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); 
        } 
    } 
    

Ich habe diese drei Probleme in meinem letzten SOA-Projekt mit Java konfrontiert. Ich hoffe, dass andere Leute diese Antwort verbessern oder Informationen mit Links zur Verfügung stellen können.

+0

Ihre Hinweise sind sehr hilfreich. Und Ihre Hilfsbereitschaft bedeutet viel mehr! Vielen Dank. – GaryX

+0

@GaryX du bist willkommen :). –

1

Ja, das sollte kein Problem sein, aber Verwendung von Array wird empfohlen. Wie Luiggi erwähnte, würden Sie eine List<MyCustomClass> erhalten. Um mehr hinzuzufügen, finden Sie eine vollständige Liste der unterstützten Typen von JAX-WS