Я создаю веб-сервис типа JAX-WS с операциями, которые возвращают объект 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;
}
Решение
(Спасибо Григорий Мостицкий за его ответ)
Я редактировал класс WebServiceReply, чтобы все возможные возвращаемые объекты распространялись от нового класса ReturnValueBase и добавляли аннотации, используя @XmlSeeAlso для ReturnValueBase. После этого JAXB работал правильно!
Тем не менее, я все еще узнаю о JAXB, сортирующемся в JAX-WS, поэтому было бы здорово, если бы кто-нибудь еще мог опубликовать любой учебник по этому вопросу.
Грегори: вы можете добавить к своему ответу, что возвращаемые объекты должны быть подклассом из ReturnValueBase. Большое спасибо за вашу помощь! Я так долго ходил на эту проблему!