返回列表 上一筆 下一筆

📄 資料內容

import org.apache.axis.message.MessageElement;

import org.w3c.dom.*;



public String getLocationAddress(String sftName, String iftSid) throws Exception {

    WsGetTreeIDResponseWsGetTreeIDResult result =

            service.wsGetTreeID(strValidCode, 1, sftName, 0);

    MessageElement[] anyArr = result.get_any();



    // keep original logs

    LOGGER.info(vaildLog("### method:getLocationAddress, webservice:wsGetTreeID"));

    LOGGER.info(vaildLog("### req:" + "wsGetTreeID(" + strValidCode + ", 1, " + sftName + ", 0)"));

    LOGGER.info(vaildLog("### anyData:" + (anyArr != null && anyArr.length > 0 ? anyArr[0] : "null")));



    if (anyArr == null || anyArr.length == 0) return "";



    // 1) find <diffgram> (skip schema)

    Element diffgram = null;

    for (MessageElement me : anyArr) {

        String ln = me.getLocalName();

        if ("diffgram".equalsIgnoreCase(ln)) { diffgram = me; break; }

    }

    if (diffgram == null) return "";



    // 2) enter <IQKB>, rows are <TreeID>

    Element dataRoot = firstChildElementByLocalName(diffgram, "IQKB");

    if (dataRoot == null) dataRoot = diffgram;



    NodeList rows = dataRoot.getElementsByTagName("TreeID");

    if (rows == null || rows.getLength() == 0) return "";



    // 3) find matching ift_sid inside the same row

    for (int i = 0; i < rows.getLength(); i++) {

        Element row = (Element) rows.item(i);



        String sid = getChildText(row, "ift_sid");

        if (!iftSid.equals(sid)) continue;



        // prefer sft_pathname; fallback to sft_path

        String pathname = getChildText(row, "sft_pathname");

        if (pathname == null || pathname.isBlank()) {

            pathname = getChildText(row, "sft_path");

        }



        // normalize and build "address/like/this"

        String localAddress = buildAddress(pathname, 2); // skip first 2 segments

        return localAddress;

    }



    // not found

    return "";

}



/* ===================== Shared/Private helpers ===================== */

/** Find first child element by local or node name (ignores prefix) */

private static Element firstChildElementByLocalName(Element parent, String local) {

    for (Node n = parent.getFirstChild(); n != null; n = n.getNextSibling()) {

        if (n.getNodeType() == Node.ELEMENT_NODE) {

            String ln = n.getLocalName(); // may be null

            String nn = n.getNodeName();  // e.g. "diffgr:diffgram"

            if (local.equals(nn) || local.equalsIgnoreCase(ln)) return (Element) n;

        }

    }

    return null;

}



/** Axis-compatible text extraction (avoids getTextContent/toString) */

private static String getChildText(Element parent, String tag) {

    NodeList nl = parent.getElementsByTagName(tag);

    if (nl == null || nl.getLength() == 0) return "";

    return getNodeTextCompat(nl.item(0)).trim();

}

private static String getNodeTextCompat(Node node) {

    if (node == null) return "";

    StringBuilder sb = new StringBuilder();

    NodeList children = node.getChildNodes();

    for (int i = 0; i < children.getLength(); i++) {

        Node c = children.item(i);

        short t = c.getNodeType();

        if (t == Node.TEXT_NODE || t == Node.CDATA_SECTION_NODE) sb.append(c.getNodeValue());

    }

    return sb.toString();

}



/** Build address: split by backslash, skip leading segments, join with '/' */

private static String buildAddress(String rawPath, int skipSegments) {

    if (rawPath == null) return "";

    String s = rawPath.trim();

    if (s.startsWith("\\")) s = s.substring(1);

    if (s.endsWith("\\"))   s = s.substring(0, s.length() - 1);

    if (s.isEmpty()) return "";



    String[] parts = s.split("\\\\");

    StringBuilder out = new StringBuilder();

    for (int i = Math.min(skipSegments, parts.length); i < parts.length; i++) {

        String p = parts[i].trim();

        if (p.isEmpty()) continue;

        if (out.length() > 0) out.append('/');

        out.append(p);

    }

    return out.toString();

}

🔐 Base64 編碼內容

aW1wb3J0IG9yZy5hcGFjaGUuYXhpcy5tZXNzYWdlLk1lc3NhZ2VFbGVtZW50OwoKaW1wb3J0IG9yZy53M2MuZG9tLio7CgoKCnB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25BZGRyZXNzKFN0cmluZyBzZnROYW1lLCBTdHJpbmcgaWZ0U2lkKSB0aHJvd3MgRXhjZXB0aW9uIHsKCiAgICBXc0dldFRyZWVJRFJlc3BvbnNlV3NHZXRUcmVlSURSZXN1bHQgcmVzdWx0ID0KCiAgICAgICAgICAgIHNlcnZpY2Uud3NHZXRUcmVlSUQoc3RyVmFsaWRDb2RlLCAxLCBzZnROYW1lLCAwKTsKCiAgICBNZXNzYWdlRWxlbWVudFtdIGFueUFyciA9IHJlc3VsdC5nZXRfYW55KCk7CgoKCiAgICAvLyBrZWVwIG9yaWdpbmFsIGxvZ3MKCiAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIG1ldGhvZDpnZXRMb2NhdGlvbkFkZHJlc3MsIHdlYnNlcnZpY2U6d3NHZXRUcmVlSUQiKSk7CgogICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyByZXE6IiArICJ3c0dldFRyZWVJRCgiICsgc3RyVmFsaWRDb2RlICsgIiwgMSwgIiArIHNmdE5hbWUgKyAiLCAwKSIpKTsKCiAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIGFueURhdGE6IiArIChhbnlBcnIgIT0gbnVsbCAmJiBhbnlBcnIubGVuZ3RoID4gMCA/IGFueUFyclswXSA6ICJudWxsIikpKTsKCgoKICAgIGlmIChhbnlBcnIgPT0gbnVsbCB8fCBhbnlBcnIubGVuZ3RoID09IDApIHJldHVybiAiIjsKCgoKICAgIC8vIDEpIGZpbmQgPGRpZmZncmFtPiAoc2tpcCBzY2hlbWEpCgogICAgRWxlbWVudCBkaWZmZ3JhbSA9IG51bGw7CgogICAgZm9yIChNZXNzYWdlRWxlbWVudCBtZSA6IGFueUFycikgewoKICAgICAgICBTdHJpbmcgbG4gPSBtZS5nZXRMb2NhbE5hbWUoKTsKCiAgICAgICAgaWYgKCJkaWZmZ3JhbSIuZXF1YWxzSWdub3JlQ2FzZShsbikpIHsgZGlmZmdyYW0gPSBtZTsgYnJlYWs7IH0KCiAgICB9CgogICAgaWYgKGRpZmZncmFtID09IG51bGwpIHJldHVybiAiIjsKCgoKICAgIC8vIDIpIGVudGVyIDxJUUtCPiwgcm93cyBhcmUgPFRyZWVJRD4KCiAgICBFbGVtZW50IGRhdGFSb290ID0gZmlyc3RDaGlsZEVsZW1lbnRCeUxvY2FsTmFtZShkaWZmZ3JhbSwgIklRS0IiKTsKCiAgICBpZiAoZGF0YVJvb3QgPT0gbnVsbCkgZGF0YVJvb3QgPSBkaWZmZ3JhbTsKCgoKICAgIE5vZGVMaXN0IHJvd3MgPSBkYXRhUm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVHJlZUlEIik7CgogICAgaWYgKHJvd3MgPT0gbnVsbCB8fCByb3dzLmdldExlbmd0aCgpID09IDApIHJldHVybiAiIjsKCgoKICAgIC8vIDMpIGZpbmQgbWF0Y2hpbmcgaWZ0X3NpZCBpbnNpZGUgdGhlIHNhbWUgcm93CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzLmdldExlbmd0aCgpOyBpKyspIHsKCiAgICAgICAgRWxlbWVudCByb3cgPSAoRWxlbWVudCkgcm93cy5pdGVtKGkpOwoKCgogICAgICAgIFN0cmluZyBzaWQgPSBnZXRDaGlsZFRleHQocm93LCAiaWZ0X3NpZCIpOwoKICAgICAgICBpZiAoIWlmdFNpZC5lcXVhbHMoc2lkKSkgY29udGludWU7CgoKCiAgICAgICAgLy8gcHJlZmVyIHNmdF9wYXRobmFtZTsgZmFsbGJhY2sgdG8gc2Z0X3BhdGgKCiAgICAgICAgU3RyaW5nIHBhdGhuYW1lID0gZ2V0Q2hpbGRUZXh0KHJvdywgInNmdF9wYXRobmFtZSIpOwoKICAgICAgICBpZiAocGF0aG5hbWUgPT0gbnVsbCB8fCBwYXRobmFtZS5pc0JsYW5rKCkpIHsKCiAgICAgICAgICAgIHBhdGhuYW1lID0gZ2V0Q2hpbGRUZXh0KHJvdywgInNmdF9wYXRoIik7CgogICAgICAgIH0KCgoKICAgICAgICAvLyBub3JtYWxpemUgYW5kIGJ1aWxkICJhZGRyZXNzL2xpa2UvdGhpcyIKCiAgICAgICAgU3RyaW5nIGxvY2FsQWRkcmVzcyA9IGJ1aWxkQWRkcmVzcyhwYXRobmFtZSwgMik7IC8vIHNraXAgZmlyc3QgMiBzZWdtZW50cwoKICAgICAgICByZXR1cm4gbG9jYWxBZGRyZXNzOwoKICAgIH0KCgoKICAgIC8vIG5vdCBmb3VuZAoKICAgIHJldHVybiAiIjsKCn0KCgoKLyogPT09PT09PT09PT09PT09PT09PT09IFNoYXJlZC9Qcml2YXRlIGhlbHBlcnMgPT09PT09PT09PT09PT09PT09PT09ICovCgovKiogRmluZCBmaXJzdCBjaGlsZCBlbGVtZW50IGJ5IGxvY2FsIG9yIG5vZGUgbmFtZSAoaWdub3JlcyBwcmVmaXgpICovCgpwcml2YXRlIHN0YXRpYyBFbGVtZW50IGZpcnN0Q2hpbGRFbGVtZW50QnlMb2NhbE5hbWUoRWxlbWVudCBwYXJlbnQsIFN0cmluZyBsb2NhbCkgewoKICAgIGZvciAoTm9kZSBuID0gcGFyZW50LmdldEZpcnN0Q2hpbGQoKTsgbiAhPSBudWxsOyBuID0gbi5nZXROZXh0U2libGluZygpKSB7CgogICAgICAgIGlmIChuLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKCiAgICAgICAgICAgIFN0cmluZyBsbiA9IG4uZ2V0TG9jYWxOYW1lKCk7IC8vIG1heSBiZSBudWxsCgogICAgICAgICAgICBTdHJpbmcgbm4gPSBuLmdldE5vZGVOYW1lKCk7ICAvLyBlLmcuICJkaWZmZ3I6ZGlmZmdyYW0iCgogICAgICAgICAgICBpZiAobG9jYWwuZXF1YWxzKG5uKSB8fCBsb2NhbC5lcXVhbHNJZ25vcmVDYXNlKGxuKSkgcmV0dXJuIChFbGVtZW50KSBuOwoKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiBudWxsOwoKfQoKCgovKiogQXhpcy1jb21wYXRpYmxlIHRleHQgZXh0cmFjdGlvbiAoYXZvaWRzIGdldFRleHRDb250ZW50L3RvU3RyaW5nKSAqLwoKcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldENoaWxkVGV4dChFbGVtZW50IHBhcmVudCwgU3RyaW5nIHRhZykgewoKICAgIE5vZGVMaXN0IG5sID0gcGFyZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7CgogICAgaWYgKG5sID09IG51bGwgfHwgbmwuZ2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuICIiOwoKICAgIHJldHVybiBnZXROb2RlVGV4dENvbXBhdChubC5pdGVtKDApKS50cmltKCk7Cgp9Cgpwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0Tm9kZVRleHRDb21wYXQoTm9kZSBub2RlKSB7CgogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuICIiOwoKICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoKICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5nZXRMZW5ndGgoKTsgaSsrKSB7CgogICAgICAgIE5vZGUgYyA9IGNoaWxkcmVuLml0ZW0oaSk7CgogICAgICAgIHNob3J0IHQgPSBjLmdldE5vZGVUeXBlKCk7CgogICAgICAgIGlmICh0ID09IE5vZGUuVEVYVF9OT0RFIHx8IHQgPT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUpIHNiLmFwcGVuZChjLmdldE5vZGVWYWx1ZSgpKTsKCiAgICB9CgogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Cgp9CgoKCi8qKiBCdWlsZCBhZGRyZXNzOiBzcGxpdCBieSBiYWNrc2xhc2gsIHNraXAgbGVhZGluZyBzZWdtZW50cywgam9pbiB3aXRoICcvJyAqLwoKcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJ1aWxkQWRkcmVzcyhTdHJpbmcgcmF3UGF0aCwgaW50IHNraXBTZWdtZW50cykgewoKICAgIGlmIChyYXdQYXRoID09IG51bGwpIHJldHVybiAiIjsKCiAgICBTdHJpbmcgcyA9IHJhd1BhdGgudHJpbSgpOwoKICAgIGlmIChzLnN0YXJ0c1dpdGgoIlxcIikpIHMgPSBzLnN1YnN0cmluZygxKTsKCiAgICBpZiAocy5lbmRzV2l0aCgiXFwiKSkgICBzID0gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGgoKSAtIDEpOwoKICAgIGlmIChzLmlzRW1wdHkoKSkgcmV0dXJuICIiOwoKCgogICAgU3RyaW5nW10gcGFydHMgPSBzLnNwbGl0KCJcXFxcIik7CgogICAgU3RyaW5nQnVpbGRlciBvdXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoKICAgIGZvciAoaW50IGkgPSBNYXRoLm1pbihza2lwU2VnbWVudHMsIHBhcnRzLmxlbmd0aCk7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewoKICAgICAgICBTdHJpbmcgcCA9IHBhcnRzW2ldLnRyaW0oKTsKCiAgICAgICAgaWYgKHAuaXNFbXB0eSgpKSBjb250aW51ZTsKCiAgICAgICAgaWYgKG91dC5sZW5ndGgoKSA+IDApIG91dC5hcHBlbmQoJy8nKTsKCiAgICAgICAgb3V0LmFwcGVuZChwKTsKCiAgICB9CgogICAgcmV0dXJuIG91dC50b1N0cmluZygpOwoKfQo=
返回列表 上一筆 下一筆