尝试以 XML 表示法解码对象时,出现 ClassCastException。
我的桌面客户端调用 RESTful 服务来返回格式正确且经过验证的列表。
吐出异常的方法是:
public class DecodeXML {
JAXBContext jaxbContext;
Unmarshaller jaxbUnmarshaller;
public Agent convertXmlToAgent(InputStreamReader inputStreamReader) {
// XStream xstream = new XStream();
// xstream.processAnnotations(Agent.class);
// xstream.processAnnotations(FtpConnection.class);
// xstream.processAnnotations(SmtpConnection.class);
// xstream.processAnnotations(SqlConnection.class);
//
// return (Agent) xstream.fromXML(inputStreamReader);
try {
jaxbContext = JAXBContext.newInstance(Agent.class);
jaxbUnmarshaller = jaxbContext.createUnmarshaller();
jaxbUnmarshaller.unmarshal(inputStreamReader);
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (Agent) jaxbUnmarshaller;
}
}
注释掉的部分是我要移出的前一个实现。
Agent
pojo 是
@XmlRootElement (name = "agent")
@XmlAccessorType(XmlAccessType.NONE)
public class Agent extends BasePojo {
private static final long serialVersionUID = 1L;
@XmlElement(name = "description")
private String description;
@XmlElement(name = "agentId")
private String agentId;
@XmlElement(name = "ftpConnection")
private FtpConnection ftpConnection;
@XmlElement(name = "smtpConnection")
private SmtpConnection smtpConnection;
@XmlElement(name = "sqlConnection")
private SqlConnection sqlConnection;
@XmlElement(name = "pollIntervall")
private Integer pollInterval;
@XmlElement(name = "lastExecutionDate")
private Date lastExecutionDate;
// getters and setters
我在这里没有看到什么?
最佳答案
嗯,你的代码确实如此
return (Agent) jaxbUnmarshaller;
解码器不是代理。它是允许解析 XML 并生成代理的对象。
你想要
return (Agent) jaxbUnmarshaller.unmarshal(inputStreamReader);
我注意到您没有发布异常的堆栈跟踪。这可能表明您认为它不重要。但这是你最大的错误。如果您仔细阅读它,您会发现它准确地指示了哪一行代码是导致异常的原因。
关于java - 如何使用 JAXB 解码输入流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39155548/