簡體   English   中英

在JAX-WS中編組多態對象

[英]Marshalling polymorphic objects in JAX-WS

我正在創建一個JAX-WS類型的Web服務,其操作返回一個對象WebServiceReply。 WebServiceReply類本身包含Object類型的字段。 根據操作,各個操作將使用幾種不同的數據類型填充該字段。

發布WSDL(我正在使用Netbeans 6.7),並獲得一個ASP.NET應用程序來檢索和解析WSDL很好,但是當我嘗試調用一個操作時,我會收到以下異常:

javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
 - with linked exception:
[javax.xml.bind.JAXBException: class [LDataObject.Patient; nor any of its super class is known to this context.]

如何在DataObject.Patient類中標記注釋,以及WebServiceReply類以使其工作? 我無法根據目標類中的注釋來編組關於編組的權威資源,所以如果有人能夠指出我也會很好。

WebServiceReply.java

@XmlRootElement(name="WebServiceReply")
public class WebServiceReply {


    private Object returnedObject;
    private String returnedType;
    private String message;
    private String errorMessage;

    .......... // Getters and setters follow

}

DataObject.Patient.java

@XmlRootElement(name="Patient")

public class Patient {

    private int uid;
    private Date versionDateTime;
    private String name;
    private String identityNumber;

    private List<Address> addressList;
    private List<ContactNumber> contactNumberList;
    private List<Appointment> appointmentList;
    private List<Case> caseList;
}

(感謝Gregory Mostizky的回答)

我編輯了WebServiceReply類,以便所有可能的返回對象都從一個新類ReturnValueBase擴展,並使用@XmlSeeAlso將注釋添加到ReturnValueBase。 之后JAXB正常工作!

盡管如此,我仍然在學習JAX-WS中的JAXB編組,所以如果有人仍可以發布任何教程,那將會很棒。

Gregory:您可能希望在返回對象需要從ReturnValueBase子類中添加回答。 非常感謝你的幫助! 這個問題已經持續了很長時間!

您需要使用@XmlSeeAlso,以便您的JAXB實現現在也包含其他類。

在你的情況下,它將是這樣的:

@XmlRootElement
@XmlSeeAlso({Patient.class, ....})
public class ReturnValueBase {
}

並且還將returnedObject屬性更改為ReturnValueBase類型。

暫無
暫無

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

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