經驗積累:Oracle Service Bus11g 利用CUSTOM BEAN接口寫關於XmlCursor時的問題

之前遇到過的問題,此次又一次出現,又一次花掉我好幾個小時的調查(不順手作mome的惡果)apache

環境:
Linux
Oracle Service Bus 11.1.1.9
Oracle WebLogic Server 10.3.6
jdk1.7.0_79oracle

問題:
在利用osb的custom bean接口,編輯XmlObject時,同一線程用兩次setTextValue方法,會莫名其妙的報空指針異常。spa

代碼:線程

public static XmlObject updateParamItems(XmlObject xmlObj, String... updItems) throws MyException {
    XmlCursor cursor = null;
    try {
        cursor = xmlObj.newCursor();
        for (String item : updItems) {
            String itemName = item.split(":")[0]; 
            String itemVaule = item.split(":")[1]; 
            cursor.toFirstChild();
            cursor.selectPath("/params/" + itemName);
            if (cursor.hasNextSelection()) {
                cursor.toNextSelection();
                cursor.setTextValue(itemVaule);//<-就這,第二次執行時會出空指針異常
            }
            cursor.toParent();
        }
    } catch (Throwable ex) {
        throw new MyException("segmentFault", ex);
    } finally {
        if (cursor != null) {
            cursor.dispose();
        }
    }
    return xmlObj;
}

結論:
我推斷的緣由是apache的xmlbeans包的版本問題,oracle產品內有這個包,並且優先度大於我放在osb的lib下的包,最重要是版本不明,
更新這個包的方法不明,oracle官方還沒給解釋(絕對是他們碼代碼時碼的不講究)。
沒有直接解決,而是繞過了問題的根源,不是直接改值,而是把整個tag刪掉,而後直接值和tag一塊兒插入就沒事了。指針

代碼:code

public static XmlObject updateParamItems(XmlObject xmlObj, String... updItems) throws MyException {
    XmlCursor cursor = null;
    try {
        cursor = xmlObj.newCursor();
        for (String item : updItems) {
            String itemName = item.split(":")[0]; 
            String itemVaule = item.split(":")[1]; 
            cursor.toFirstChild();
            cursor.selectPath("/params/" + itemName);
            if (cursor.hasNextSelection()) {
                cursor.removeXml();
                cursor.insertElementWithText(itemName, itemVaule);
            }
            cursor.toParent();
        }
    } catch (Throwable ex) {
        throw new MyException("segmentFault", ex);
    } finally {
        if (cursor != null) {
            cursor.dispose();
        }
    }
    return xmlObj;
}

clipboard.png

相關文章
相關標籤/搜索