Processo di flusso di lavoro personalizzato per convertire JSON in XML
Il codice fornito converte JSON in XML, memorizzando l'XML risultante in una variabile di processo del flusso di lavoro denominata dataXml
.
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.jcr.Node;
import javax.jcr.Session;
import org.json.JSONObject;
import org.json.XML;
import org.slf4j.Logger;
import org.osgi.service.component.annotations.Component;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component(property = {
"service.description=Convert JSON to XML",
"process.label=Convert JSON to XML"
})
public class ConvertJSONToXML implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(ConvertJSONToXML.class);
@Override
public void execute(final WorkItem workItem, final WorkflowSession workflowSession, final MetaDataMap arg2) throws WorkflowException {
String processArgs = arg2.get("PROCESS_ARGS", "string");
log.debug("The process argument I got was " + processArgs);
String submittedDataFile = processArgs;
String payloadPath = workItem.getWorkflowData().getPayload().toString();
log.debug("The payload in convert json to xml " + payloadPath);
String dataFilePath = payloadPath + "/" + submittedDataFile + "/jcr:content";
try {
Session session = workflowSession.adaptTo(Session.class);
Node submittedJsonDataNode = session.getNode(dataFilePath);
InputStream jsonDataStream = submittedJsonDataNode.getProperty("jcr:data").getBinary().getStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(jsonDataStream, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
stringBuilder.append(inputStr);
}
JSONObject submittedJson = new JSONObject(stringBuilder.toString());
log.debug(submittedJson.toString());
String xmlString = XML.toString(submittedJson);
log.debug("The json converted to XML " + xmlString);
MetaDataMap metaDataMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
metaDataMap.put("xmlData", xmlString);
} catch (Exception e) {
log.error("Error converting JSON to XML: " + e.getMessage(), e);
}
}
}
Crea flusso di lavoro
Per gestire l’invio di un modulo, crea un flusso di lavoro che includa due passaggi:
- Il passaggio iniziale utilizza un processo personalizzato per trasformare i dati JSON inviati in XML.
- Il passaggio successivo genera un PDF combinando i dati XML con il modello XDP.
Distribuire il codice di esempio
Per eseguire il test sul server locale, segui questi passaggi semplificati:
- Scarica e installa il bundle personalizzato tramite la console Web AEM OSGi.
- Importa il pacchetto del flusso di lavoro.
- Importa il modulo adattivo di esempio e il modello XDP.
- Anteprima del modulo adattivo.
- Completa alcuni campi modulo.
- Invia il modulo per avviare il flusso di lavoro AEM.
- Trova il PDF sottoposto a rendering nella cartella del payload del flusso di lavoro.