@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.FIELD)
@JSONConfigurable
public class InteractionRequest {
@XmlElement(name = "skill")
protected String skillName;
}
@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.FIELD)
@JSONConfigurable
public class InteractionChatRequest extends InteractionRequest {
@XmlElement
@XmlJavaTypeAdapter(LPStringsXmlAdapter.class)
@XmlElementWrapper(name = "preChatLines")
protected List<String> line;
}
和2个用法:
@PUT
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response postExitSurvey(EntityHolder<InteractionRequest> ent) {
InteractionRequest request = ent.getEntity();
return null;
}
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response interactionRequest(EntityHolder<InteractionChatRequest> ent) {
InteractionChatRequest params = ent.getEntity();
return null;
}
现在,在这两种情况下,实体持有者都持有InterationRequest对象,这会在第二次使用中导致ClassCastException。
知道为什么吗?泽西不应该将实体投射到我声明的类型吗? 在这种情况下,层次结构是否可能?
谢谢, UDI
答案 0 :(得分:1)
您遇到了JAXB注释问题:InteractionRequest
和InteractionChatRequest
都注明了@XmlRootElement(name = "request")
。因此它们具有相同的根元素,这使得JAXB无法区分它们。
尝试将InteractionChatRequest
更改为@XmlRootElement(name = "chat-request")
。