簡體   English   中英

JAX-RPC Web服務中的多態

[英]Polymorphism in JAX-RPC web services

我有一個JAX-RPC(Java)Web服務,需要返回一個復雜的多態值。 更具體地說,類結構是這樣的:

abstract class Child {
}

class Question extends Child {
    private String name;
    // other fields, getters, and setters
}

class Section extends Child {
    private String label;
    private Child[] children;
    // getters and setters
}

class Quiz {
    private Child[] elements;
    // getter and setter
}

我的Web服務具有一種返回測驗的方法,該測驗當然可以包含問題和部分,其中可能包含問題和其他部分,依此類推。 但是,當我生成WSDL時,只有Child和Quiz進入其中。當我調用Web服務時,我會返回一個帶有正確數量的子代的Quiz元素,但它們都是Child元素,而且都為空。

除了僅將XML作為String返回之外,還有什么好方法可以使這項工作有效?

在任何人問到之前,由於無法控制的情況,我無法使用JAX-WS。

也許有人還在尋找它,可以在軸1.4中完成:

  1. 將下一行添加到Axis Web服務部署文件(wsdd)的部分中:

     <parameter name="emitAllTypesInWSDL" value="true" /> 
  2. 在ant構建文件中修改您的任務,使其包含“ extraClasses”:

     <axis-java2wsdl ... extraClasses="..."></axis-java2wsdl> 

    在extraClasses中,將提及將要傳遞的所有類,因為axis無法猜測您將傳遞/返回哪個孩子作為參數。

完成后,現在您可以在接受父類的方法中傳遞派生類。 等等:

// server side class A { ...}
class B extends A {...}
class C extends A {...}

// ws
class wsAxis { public void processPolymorphCall(A obj); }

// client side
wsAxis.processPolymorphCall(new C());

// this will work now, as much as returning derivated classes in place of base class.

我認為JAX-RPC不以這種方式支持多態。 我有一個類似的問題,因此必須通過創建一個只有兩個成員的類來解決該問題-每個可能返回的兩個類中的每個成員-並根據我要返回的類型填充一個。 因此,在您的情況下:

class Child 
{
    private Section section;
    private Question question;

   // Constructor, etc...
}

class Question 
{
    private String name;
    // other fields, getters, and setters
}

class Section 
{
    private String label;
    private Child[] children;
    // getters and setters
}

class Quiz 
{
    private Child[] elements;
    // getter and setter
}

我知道,這需要委托人檢查哪個兒童成員居住並且丑陋得可怕。

暫無
暫無

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

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