JavaCompute 节点创建新消息
调用 MbMessage 的缺省构造函数以创建空白消息
MbMessage outMessage = new MbMessage();
从入局消息复制这些头
copyMessageHeaders(inMessage, outMessage);
创建新的消息体
首先,添加*解析器元素
对于 XML
然后,可以使用 createElement 方法和代理 XPath 实现的扩展语法构建该消息的其余部分。
文档与java操作。
<document>
<chapter title='Introduction'>
某些文本。
</chapter>
</document>
示例程序。
import com.ibm.broker.javacompute.MbJavaComputeNode;
import com.ibm.broker.plugin.*;
public class pub_sub_flow_JavaCompute extends MbJavaComputeNode {
public void evaluate(MbMessageAssembly inAssembly) throws MbException {
MbOutputTerminal out = getOutputTerminal("out");
MbOutputTerminal alt = getOutputTerminal("alternate");
MbMessage inMessage = inAssembly.getMessage();
// create new message
MbMessage outMessage = new MbMessage(inMessage);
MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,
outMessage);
try {
// ----------------------------------------------------------
/**
<document>
<chapter title='Introduction'>
某些文本。
</chapter>
</document>
*/
// get the chapter
MbElement root = inAssembly.getMessage().getRootElement();
MbElement chapter = root.getLastChild().getFirstChild().getFirstChild();
// Add user code below
// get the LocalEnvironment.
inAssembly.getLocalEnvironment();
// get the GlobalEnvironment.
inAssembly.getGlobalEnvironment();
// get the message from the MbMessageAssembly.;
// first too check the MbMessageAssembly.
MbMessage msg = inAssembly.getMessage();
// get the root. it is the root.
MbElement eleroot = msg.getRootElement();
// get the attribute. it is the first child;
MbElement eleatt = eleroot.getFirstChild();
// get the MQMD.
MbElement elemqmd = eleroot.getNextSibling();
// get the xml. it is the message.
MbElement msgbody = eleroot.getLastChild();
msgbody = elemqmd.getNextSibling();
// End of user code
// ----------------------------------------------------------
// The following should only be changed
// if not propagating message to the 'out' terminal
System.out.println("AAAAAA");
out.propagate(outAssembly);
} finally {
// clear the outMessage
outMessage.clearMessage();
}
}
}
JavaCompute 节点复制消息
MbMessage outMessage = new MbMessage(inAssembly.getMessage);
MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
JavaCompute 节点创建新元素
使用 JavaCompute 节点中的以下方法可在消息树中创建新元素:
- createElementAsFirstChild()
- createElementAsLastChild()
- createElementBefore()
- createElementAfter()
该方法返回对新建元素的引用。每个方法都有三个重载形式:
createElement...(int type)
创建指定类型的空白元素。有效的一般类型是:
· MbElement.TYPE_NAME。这种类型的元素只有名称,例如,XML 元素。
· MbElement.TYPE_VALUE。这种类型的元素只有值,例如,未包含在 XML 元素中的 XML 文本。
· MbElement.TYPE_NAME_VALUE。这种类型的元素既有名称,也有值,例如,XML 属性。
也可以分配特定的类型值。这类信息的含义取决于解析器。元素名称和值信息必须使用 setName() 和 setValue() 方法进行指定。
createElement...(int type, String name, Object value)
用于在创建时设置元素值和元素名称的方法。
createElement...(String parserName)
createElement...() 的特殊形式,仅用于创建*解析器元素。
以下 Java 代码示例向从 JavaCompute 节点访问消息树中的元素中给出的 XML 示例添加新的 chapter 元素:
MbElement root = outMessage.getRootElement();
MbElement document = root.getLastChild().getFirstChild();
MbElement chapter2 = document.createElementAsLastChild(MbElement.TYPE_NAME,"Chapter",null);
// add title attribute
MbElement title2 = chapter2.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE,
"title", "Message Flows");
这段代码生成以下 XML 输出:
<document>
<chapter title="Introduction">
某些文本。
</chapter>
<chapter title="Message Flows"/>
</document>
JavaCompute 节点访问消息头
JavaCompute 节点复制消息头
JavaCompute 节点访问 MQMD 头
JavaCompute 节点访问 MQRFH2 头
JavaCompute 节点更新 Local Environment
创建本地环境的新副本,以更新它。使用副本构造函数的完全版本创建新的 MbMessageAssembly 对象,如下例所示:
编辑该副本以更新本地环境。
JavaCompute 节点更新 Global Environment
Global Environment 跨消息流更改,因此不必创建用于更改的副本。以下 Java 代码显示了如何更改 Global Environment:
MbMessage env = assembly.getGlobalEnvironment();
env.getRootElement().createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "Status", "Success");
getOutputTerminal("out").propagate(assembly);
将消息传播到 JavaCompute 节点 Out 和 Alternate 终端上
JavaCompute 节点有两个输出终端:Out 和 Alternate。因此,您可以将该节点用作 filter 节点和消息转换节点。处理消息后,可使用 propagate() 方法将该消息传播到输出终端上。要将消息套件传播到 Out 终端上,请使用以下方法:
out.propagate(assembly);
要将消息套件传播到 Alternate 终端上,请使用以下方法:
alt.propagate(assembly);
WebSphere Message Broker 提供了内置节点,您可以使用它们来定义您的消息流。要获取有关这些节点中的每个节点的信息,请参考下面相应的链接。此处列出的节点根据其功能进行分组。
输入和输出
- MQInput 节点
- MQOptimizedFlow 节点
- MQOutput 节点
- MQGet 节点
- MQReply 节点
- Publication 节点
- MQeInput 节点
- MQeOutput 节点
- SCADAInput 节点
- SCADAOutput 节点
- HTTPInput 节点
- HTTPReply 节点
- HTTPRequest 节点
- Real-timeInput 节点
- Real-timeOptimizedFlow 节点
- Input 节点
- Output 节点
- JMSInput 节点
- JMSOutput 节点
消息处理和转换
- Compute 节点
- Database 节点
- DataDelete 节点
- Datalnsert 节点
- DataUpdate 节点
- Extract 节点
- JavaCompute 节点
- JMSMQTransform 节点
- MQJMSTransform 节点
- Mapping 节点
- Warehouse 节点
- XMLTransformation 节点
整理请求
作出决定
- Check 节点
- Filter 节点
- FlowOrder 节点
- Label 节点
- ResetContentDescriptor 节点
- RouteToLabel 节点
- TimeoutControl 节点
- TimeoutNotification 节点
- Validate 节点
子流标识
错误处理和报告