![](/img/trans.png)
[英]JAX-RPC, Spring web services, and UnsupportedOperationCallException
[英]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中完成:
將下一行添加到Axis Web服務部署文件(wsdd)的部分中:
<parameter name="emitAllTypesInWSDL" value="true" />
在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.