📄 myreceiver.java
字号:
package jbisample;
import java.util.Map;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.jbi.messaging.MessageExchange.Role;
import javax.xml.namespace.QName;
import org.apache.servicemix.MessageExchangeListener;
import org.apache.servicemix.components.util.ComponentSupport;
import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
public class MyReceiver extends ComponentSupport implements MessageExchangeListener {
public MyReceiver() {
//定义服务的名称,以便JBI通过此名字来找到此服务组件。
super(new QName("http://servicemix.org/demo", "receiver"), "input");
}
/**
*
下面的方法不停地来接收信息。
在JBI里面,所有的信息都是通过MessageExchange传过来,每一个传过来的MessageExcahnge都有一个唯一的确认号ExchangeId。
一个具体的MessageExchange的内容如下:
InOut[
id: ID:OEM-MICRO-2966-1186566076648-2:0
status: Active
role: provider
service: {http://servicemix.org/demo}receiver
endpoint: receiver
in: <?xml version="1.0" encoding="UTF-8"?><getHello xmlns="hello">
<in0 xmlns="hello">Aihu</in0>
</getHello>
]
*/
public void onMessageExchange(MessageExchange exchange) throws MessagingException {
System.out.println(" ******** MessageExchange start ************** ");
System.out.println(exchange);
System.out.println(" ******** MessageExchange end ************** ");
//下面的方法可以得到exchangeId号
String exchangid = exchange.getExchangeId();
if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
//下面的方法得到端口号的名称,通过下面的方法可以得到端口号的名称。
String endPoint = exchange.getEndpoint().getEndpointName();
if(endPoint.equalsIgnoreCase("receiver"))
{
//将MessageExchange转化为InOut的形式。
InOut inout = (InOut) exchange;
// 取出NormalizedMessage
NormalizedMessage inMessage = inout.getInMessage();
QName qName = new QName("http://servicemix.org/demo", "helloService");
InOut exInOut = createInOutExchange(qName, null, null);
exInOut.setProperty("requestId", exchangid);
exInOut.setInMessage(inMessage);
send(exInOut);
} else
{
InOut inout = (InOut) exchange;
NormalizedMessage outMessage = inout.getOutMessage();
String id = (String) getProperty(inout, "requestId");
InOut returnInOut = (InOut) ht.get(id);
returnInOut.setOutMessage(outMessage);
send(returnInOut);
}
if (exchange.getRole() == Role.PROVIDER) {
ht.put(exchangid,exchange);
} else
{
done(exchange);
}
}
}
protected Object getProperty(MessageExchange me, String name) {
return me.getProperty(name);
}
private Map ht = new ConcurrentHashMap();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -