我有一個類,如下面的RequestWrapper此類註釋:WebResult VS與多態
@XmlRootElement(namespace = "http://foo.com/model", name = "ShortPerson")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://foo.com/model", name = "ShortPerson"
public ShortPerson extends Person {
}
@XmlRootElement(namespace = "http://foo.com/model", name = "TallPerson")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://foo.com/model", name = "TallPerson"
public TallPerson extends Person {
}
然後,我有一個SEI這樣:從繼承
@XmlRootElement(namespace = "http://foo.com/model", name = "Person")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://foo.com/model", name = "Person"
public abstract Person {
}
和兩個班
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED, use = SOAPBinding.Use.LITERAL, style = SOAPBinding.Style.DOCUMENT)
@WebService(targetNamespace = "http://foo.com/services")
public interface PersonService {
@RequestWrapper(localName = "getPersonById", className = "com.foo.services.personService.GetPersonById", targetNamespace = "http://foo.com/services")
@ResponseWrapper(localName = "getPersonByIdResponse", className = "com.foo.services.personService.GetPersonByUidResponse", targetNamespace = "http://foo.com/services")
@WebResult(targetNamespace = "http://foo.com/model", name = "Person")
Person getPersonById(
@WebParam(targetNamespace = "http://foo.com/services", name = "PersonId") Long personId);
}
而我的響應包裝類看起來像這樣:
@XmlRootElement(name = "getPersonByIdResponse", namespace = "http://foo.com/services")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getPersonByIdResponse", namespace = "http://foo.com/services", propOrder = { "person" })
public class GetPersonByIdResponse {
@XmlElementRefs({
@XmlElementRef(name = "TallPerson", type = TallPerson.class, namespace = "http://foo.com/model"),
@XmlElementRef(name = "SmallPerson", type = SmallPerson.class, namespace = "http://foo.com/model")
})
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
所以這裏的問題是,如果我通過JAXB直接測試ResponseWrapper此類並填充TallPerson對象,我正確地封送對象爲特定於TallPerson的XML(和相同的作品SmallPerson)。
問題是當我在戰爭中部署它並且服務啓用它時,當TallPerson返回結果時,除了空消息,我從Web服務調用中收不到任何東西。實際上,我甚至沒有收到<getPersonByIdResponse>的響應包裝根XML元素。
所以我的問題是,如果我有一個多態的請求或響應對象(在這種情況下是一個響應對象),WebResult名稱/目標名稱空間如何影響ResponseWrapper內的參數。因爲在我的情況下,我正在利用XmlElementRefs將我的基礎對象Person正確編組到TallPerson或SmallPerson中,但這與WebResult上的父類Person的名稱空間/名稱有什麼關係?我不確定是否有衝突導致XML響應無法生成。
感謝
你曾經解決過這個問題嗎? 我看到在我的web服務類似的問題: 我有一個花 3班類命名,從它,玫瑰,鬱金香,由於某種原因,向日葵 繼承,當我玫瑰和鬱金香的發送resposne,響應心不是空白,但是當我發送SunFlowers時,回覆是空白的。如果你解決了它,請告訴我 – 2013-09-04 15:53:34