2011-05-29 68 views
2
@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的用途:層次在新澤西州的EntityHolder類型

@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; 
} 

現在,在這兩種情況下,實體保持器保持,這導致在第二利用一個ClassCastException InterationRequest對象。

任何想法爲什麼? Jersey不應該將實體轉換爲我聲明的類型嗎? 在這種情況下甚至可能是層次結構?

感謝, 烏迪

回答

1

你必須與JAXB註釋的問題:既InteractionRequestInteractionChatRequest@XmlRootElement(name = "request")註解。因此它們具有相同的根元素,這使得JAXB無法區分它們。

嘗試將InteractionChatRequest更改爲@XmlRootElement(name = "chat-request")

+0

謝謝@Tarlog工作。這不是一個完美的解決方案,但嘿,生活並不完美;) – Udi 2011-05-29 13:09:22

+2

只要有人遇到這個問題,我發現一個更好的解決方案: 我將@ InteractionChatRequest的註釋從@XmlRootElement更改爲@XmlType。 現在它的工作原理與我想要的完全一樣... – Udi 2011-05-29 15:14:30

相關問題