gpt4 book ai didi

java - 在 JAX-WS 中编码多态对象

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:39 24 4
gpt4 key购买 nike

我正在创建一个 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;
}

解决方案

(感谢Gregory Mostizky的回答)

我编辑了 WebServiceReply 类,以便所有可能的返回对象都从一个新类 ReturnValueBase 扩展,并使用 @XmlSeeAlso 添加注释到 ReturnValueBase。之后 JAXB 正常工作!

尽管如此,我仍在学习 JAX-WS 中的 JAXB 编码,所以如果有人仍然可以发布任何关于此的教程,那就太好了。

Gregory:您可能想在您的回答中补充一点,即返回对象需要从 ReturnValueBase 子类化。非常感谢你的帮助!这么久以来,我一直在为这个问题发疯!

最佳答案

您需要使用 @XmlSeeAlso这样您的 JAXB 实现现在也将包含其他类。

在你的情况下它会是这样的:

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

并且还将 returnedObject 属性更改为 ReturnValueBase 类型。

关于java - 在 JAX-WS 中编码多态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1163795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com