2012-10-16 26 views

回答

7

您將在客戶端(或者如果WS消費者使用另一種語言編寫的話,MyCustomClass對象數組)獲得List。這不會是一個問題。請記住始終編程接口。

看來你還是沒有太多的實踐中使用Java創建WS,所以我給你一些建議:

  • 不得發送2個或多個對象包含循環引用,否則你將以循環引用問題結束。這是因爲JAX-WS工具會爲請求創建一個不可分割的XML響應。這可能很難發現。讓我們來看看一個案例:

    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! 
        } 
    } 
    
  • 必須始終具有界面在你的回報類,而不是特定的Java類庫。這意味着,您的類應該具有List,SetMap(在容器的情況下),因爲此接口比實現類更高級別,並且如果非Java客戶端嘗試使用您的Web服務方法,則可能會出現問題。

    public class ClassC { 
    
        List<ClassA> lstClassA; //good! 
        ArrayList<ClassB> alstClassB; //not very flexible with other languages =\ 
    } 
    
  • ,將通過您的Web服務的類應該的POJO(普通Java對象),而不是服務或業務邏輯層的類。爲什麼?因爲只有屬性值在與客戶端通信時被整理/解除編組,沒有方法代碼將出現在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); 
        } 
    } 
    

我面臨與Java我的最後一個SOA項目這三個問題。我希望其他人可以加強這個答案或提供有關鏈接的信息。

+0

你的建議是非常有幫助的。而你願意幫助別人意味着更多!非常感謝你。 – GaryX

+0

@GaryX歡迎您:)。 –

1

是的,這不應該是一個問題,但建議使用陣列的用法。由於Luiggi提到你會收到List<MyCustomClass>。若要添加更多以查找JAX-WS支持類型的完整列表,請參閱JAX-WS here

相關問題