मैं अपने खच्चर आवेदन में एक डेटा संरचना को बदलने के लिए एक जावा वर्ग का उपयोग कर रहा हूँ। अपने प्रवाह के अंत में मैं परिणाम तक पहुंचना चाहता हूं और इसे application/json के रूप में वापस करना चाहता हूं।
डिबगिंग करते समय मुझे पेलोड के लिए ये मान मिलते हैं:
Mule Debug
ट्रांसफ़ॉर्म घटक org.json.JSONArray प्रकार के पेलोड को पहचानता है। इसके तहत एक var myArrayList, जिसे मैंने असाइन नहीं किया था, जिसमें सभी मान हैं।
जावा में getNodes () विधि इस तरह दिखती है:

public JSONArray getNodes() {
    JSONArray arr = new JSONArray();
    for(Node node : nodes) {
        arr.put(node.getJSON());
    }
    return arr;
}

जहां वापसी मूल्य सही है।
मैंने इनवोक घटक के MIME प्रकार को application/json या text/plain पर सेट करने का प्रयास किया, जिसके परिणामस्वरूप दोनों में त्रुटि हुई।
मैंने पेलोड को output application/json---payload के रूप में वापस करने का प्रयास किया, जिसके परिणामस्वरूप खाली वस्तुओं की एक सरणी मेरे वापसी मूल्य के आकार की हो गई।
जब मैं घड़ी को देखता हूं तो मुझे payload.myArrayList तक पहुंच कर सूची मिलती है, लेकिन एक ट्रांसफॉर्म घटक में मान प्राप्त नहीं कर सकता।
प्रवाह इस तरह दिखता है।
Flow
मैं mulesoft में JSONArray से json कैसे लौटाऊं?

संपादित करें: समाधान:

public Node[] getNodes() {
    assignParentIds();
    assignNextIds();
    assignChildIds();
        
    Node[] nodeArr = new Node[nodes.size()];
    for(int i = 0; i < nodes.size(); i++) {
        nodeArr[i] = nodes.get(i);
    }
    return nodeArr;
}

नोड मेटाडेटा

%dw 2.0
output application/json
---
{
    hierarchieSet: payload map ( item , index ) -> {
        zshop: item.zshop,
        nodeid: item.nodeid,
        nodename: item.nodename,
        tlevel: item.tlevel,
        parentid: item.parentid,
        childid: item.childid,
        nextid: item.nextid
    }
}
1
Peter 26 नवम्बर 2020, 19:14

1 उत्तर

सबसे बढ़िया उत्तर

मुझे संदेह है कि DataWeave org.json.JSONArray को एक चलने योग्य के रूप में समझता है क्योंकि यह Iterable<Object> लागू करता है, हालांकि यह विशेष रूप से JSON नोड्स को नहीं समझता है। DataWeave के लिए application/json एक स्ट्रिंग या स्ट्रीम है जिसमें JSON का 'टेक्स्टुअल' प्रतिनिधित्व होता है। एक तृतीय पक्ष पुस्तकालय जो जावा ऑब्जेक्ट्स का उपयोग करके JSON का प्रतिनिधित्व करता है क्योंकि इसके कार्यान्वयन को JSON के रूप में नहीं समझा जा रहा है और यह application/json MIME प्रकार का सही उपयोग नहीं है।

आपको परिणामी JSON सरणी को ट्रांसफ़ॉर्म प्रोसेसर के इनपुट के रूप में उपयोग करने के लिए टेक्स्ट दस्तावेज़ पर वापस क्रमबद्ध करना चाहिए।

वैकल्पिक रूप से आप जेएसओएन संरचनाओं को सादे जावा ऑब्जेक्ट्स (पीओजेओ) में application/java के रूप में उपयोग कर सकते हैं। यह अधिक कुशल होना चाहिए क्योंकि JSON में कनवर्ट करने और इसे फिर से पार्स करने से बचा जाता है।

1
aled 27 नवम्बर 2020, 00:04