我想知道,如果我把JAX-WS泛型方法,如:jax-ws webservice中的泛型類會發生什麼?
public List<MyCustomClass> getSomething()
是否JAX-WS支持呢? 在客戶端,該方法的返回結果如何?
我想知道,如果我把JAX-WS泛型方法,如:jax-ws webservice中的泛型類會發生什麼?
public List<MyCustomClass> getSomething()
是否JAX-WS支持呢? 在客戶端,該方法的返回結果如何?
您將在客戶端(或者如果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
,Set
和Map
(在容器的情況下),因爲此接口比實現類更高級別,並且如果非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項目這三個問題。我希望其他人可以加強這個答案或提供有關鏈接的信息。
你的建議是非常有幫助的。而你願意幫助別人意味着更多!非常感謝你。 – GaryX
@GaryX歡迎您:)。 –
是的,這不應該是一個問題,但建議使用陣列的用法。由於Luiggi提到你會收到List<MyCustomClass>
。若要添加更多以查找JAX-WS支持類型的完整列表,請參閱JAX-WS here
thx,那就是魔術 – GaryX