我正在创建一个具有返回对象WebServiceReply的操作的JAX-WS类型的Web服务。 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编码,所以如果有人仍然可以在此发布任何教程,那就太好了。

格雷戈里:您可能希望在答案中添加返回对象需要从ReturnValueBase子类化的答案。非常感谢你的帮助!我已经为这个问题疯狂了很长时间!

最佳答案

您需要使用@XmlSeeAlso,以便您的JAXB实现现在也将包括其他类。

在您的情况下,它将如下所示:

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

并且也将returnObject属性更改为ReturnValueBase类型。

09-28 01:48