簡體   English   中英

JAXB的Unmarshal()方法返回一個空對象

[英]Unmarshal() method of JAXB returns an empty object

注意:此項目使用Java 9中不推薦使用的JAXB。您需要在Java_HOME而不是Java 9中安裝Java8。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();
}

您必須使用了錯誤的JAXBUtils依賴關系(否則版本號錯誤)。 確保在添加斷點, 返回getElement(packageName,response.toString(),root,clazz); 並調試代碼。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM