JAXB的Unmarshal()方法返回一个空对象

时间:2018-05-27 05:27:29

标签: java xml xsd jaxb

注意:此项目使用Java 9中不推荐使用的JAXB。您需要在JAVA_HOME中使用Java 8而不是Java 9. POM文件已设置好,因此所有依赖项都可以正常工作。我能够用Maven构建程序。我只是确保功能正常。

我正在努力将此项目更新为较新版本的scribejava和async-http-client。这是我的存储库(我正在研究这个问题): https://github.com/khoanguyen0791/tradeking

我已将错误跟踪到unmarshal()方法。输入存在,但该方法返回一个空对象。有人可以解释为什么它返回一个空的JAXB对象以及如何修复它? xml架构在我的存储库中。

static public <T> T getElement(InputSource source, String path, String root,
        Class<T> clazz) throws Exception {

    JAXBContext jaxbContext = JAXBContext.newInstance(path);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    dbf.setNamespaceAware(true);
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(source);
    Element element = doc.getDocumentElement();
    System.out.println(element == null);



    if (root != null) {
        NodeList nodeList = element.getChildNodes();
        for (int j = 0; j < nodeList.getLength(); j++) {
            System.out.println(j);

            Node childNode = nodeList.item(j);

            if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                if (childNode.getNodeName().equals(root)) {
                    element = (Element) childNode;

                    break;
                }
            }
        }
    }

    NodeList nodes = element.getChildNodes();
     for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println("" + nodes.item(i).getTextContent());
         }
    JAXBElement<T> t = jaxbUnmarshaller.unmarshal(element, clazz);

    return t.getValue();
}

1 个答案:

答案 0 :(得分:0)

您必须使用错误的JAXBUtils依赖项(否则错误的版本号)。确保添加断点, 返回getElement(packageName,response.toString(),root,clazz); 并调试代码。 希望这会有所帮助。