java - 如何使用 JAXB 解码输入流?

标签 java xml rest jaxb

尝试以 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/

相关文章:

java - 尝试使用 HttpClient 获取 DOMINO HTTP session — 响应代码始终为 200

c# - 在 C# 中使用 XSD 字符串验证 XmlDocument?

java - 让 Spring 在 rest 调用中接受 UTF-8 字符

java - 如何设计正确的 XML 并根据请求名称检索值?

python - 如何将一个字段显示为序列化器中的字符串?

java - 为什么当我在存储库中保存对象时相同的 id 会递增?

java - 在 Android 上用 Java 或 C/C++ 解码 Airplay 数据包

java - Java 的 PriorityQueue 与最小堆有何不同?

java - 如何下载 Netbeans 6.9 IDE 的源代码

java - 包含 XML 内容的 CXF Web 服务响应