簡體   English   中英

在jax-ws webservice中泛型類會發生什么?

[英]What happens to generic class in jax-ws webservice?

我想知道我是否在jax-ws中使用了泛型方法,例如:

public List<MyCustomClass> getSomething()

jax-ws支持這個嗎? 在客戶端,該方法的返回結果如何?

您將在客戶端獲取List(如果WS使用者使用其他語言編寫,則獲取MyCustomClass對象的數組)。 這不會是個問題。 記住要始終編程到接口。

看起來你仍然沒有太多練習用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庫類。 這意味着,您的類應該具有ListSetMap (在容器的情況下),因為此接口比實現類更高級別,並且如果非Java客戶端嘗試使用您的Web服務方法,您可能會遇到問題。

     public class ClassC { List<ClassA> lstClassA; //good! ArrayList<ClassB> alstClassB; //not very flexible with other languages =\\ } 
  • 將通過Web服務的類應該是POJO(Plain Old Java Objects),而不是服務或業務邏輯層類。 為什么? 因為在與客戶端通信時,只有屬性值將被編組/解組, 所以 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項目中遇到了這三個問題。 我希望其他人可以增強這個答案或提供鏈接信息。

是的,這應該不是問題,但建議使用數組。 正如Luiggi所說,你會收到一個List<MyCustomClass> 要添加更多內容,可以在此處找到JAX-WS支持的類型的完整列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM