IBM Integration Bus Java 计算节点:输出一个 w3c.dom.Document 或字符串

IBM Integration Bus Java Compute Node: output a w3c.dom.Document or String

过去几个月我一直在研究 Java 模块来转换 XMLs。例如,它应该接收一个 soap 请求并用元数据存储库中的其他元素填充 soap:header 元素。该模块应该可以在任何中间件中普遍实施(我的本地系统是 SAP PI)。

现在我的任务是将此模块作为 jar 实现到 IBM Integration Bus 中的 JavaCompute 节点中。问题是要导出结果 XML 我需要将数据放入 Java 计算节点的 outMessage 中。但是,我没有找到将 org.w3c.com.Document 转换为 MbElement 或将文档或其内容插入 MbElement.

的方法

实际上,如果不按预期使用 IBM API,我根本看不出有什么方法可以将任何东西(甚至 XML 字符串都没有)放在那里,所以我必须编写代码读取我已经完成的文档并从中构建一个 MbElement。

这看起来像下面这样:

public void evaluate(MbMessageAssembly inAssembly) throws MbException {

    MbOutputTerminal out = getOutputTerminal("out");
    MbOutputTerminal alt = getOutputTerminal("alternate");

    MbMessage inMessage = inAssembly.getMessage();

    // create new empty message
    MbMessage outMessage = new MbMessage();
    MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,
            outMessage);

    try {
        // optionally copy message headers
        // copyMessageHeaders(inMessage, outMessage);
        // ----------------------------------------------------------
        // Add user code below

        //Create an example output Document
        String outputContent = "<element><subelement>Value</subelement></element>";
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(outputContent));
        Document outDocument = db.parse(is);

//Get the Document or its content into the outRoot or outMessage somehow.

MbElement outRoot = outMessage.getRootElement();

//Start to iterate over the Document and use Methods like this to build up the MbElement?
MbElement outBody = outRoot.createElementAsLastChild("request");

// End of user code
} catch (MbException e) { ...

您可以将 org.w3c.com.Document 转换为字节数组 (example)。然后你可以使用下面的代码:

        MbMessage outMessage = new MbMessage();
        //copy message headers if required 
        MbElement oRoot = outMessage.getRootElement();  
        MbElement oBody = oRoot.createElementAsLastChild(MbBLOB.PARSER_NAME);  
        oBody.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "BLOB", yourXmlAsByteArray);
        MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, inAssembly.getLocalEnvironment(), inAssembly.getExceptionList(), outMessage);