我正在寻找一个本地(在框架方面是正确的)将第三方(自定义)对象发送到柑橘模拟器中的JMS的方法吗? 我试过了:
scenario
.send()
.payloadModel(myObject);
但在JMS队列中,myObject显示为 com.consol.citrus.message.DefaultMessage 而不是 com ... myObject 。
示例: 场景 - 接收http POST请求(作为触发器)并将JMS对象发送到消息队列。
配置
...
.useObjectMessages(true)
...
方案
...
import com.temafon.data.MORequest;
@Scenario("morequest")
@RequestMapping(value = "/simulator/morequest",method = RequestMethod.POST)
public class JmsMoRequestScenario extends AbstractSimulatorScenario {
@Override
public void run(ScenarioDesigner scenario) {
MORequest request = new MORequest(12345678901L, "USSD", "1172", "ON",
11L);
request.setSourcePort(3);
scenario
.receive()
.payload("getmorequest");
scenario
.send("jms.queue.destination")
.payloadModel(request);
在这种情况下,我希望jms.queue.destination得到类似屏幕1的内容
P.S。我已经在其他类中使用 JavaActionBuilder 和 jmsTemplate.send 实现了解决方法,并且
scenario
.java(//Object).method(//instance");
但它似乎不是正确的柑橘模拟器方式
答案 0 :(得分:0)
在Citrus Java DSL中设置payloadModel()
总是会导致对象的某种编组表示,而这不是您想要的。都不使用.useObjectMessages(true)
为您工作,因为这会导致整个Citrus消息对象用作消息有效负载。
您需要定义一个完整的Citrus消息对象,就为JMS目标创建有效负载而言,它将保持不变。然后,Citrus将自动使用具有适当对象有效负载的JMS对象消息。
MORequest request = new MORequest(12345678901L, "USSD", "1172", "ON", 11L);
request.setSourcePort(3);
scenario
.receive()
.payload("getmorequest");
scenario
.send("jms.queue.destination")
.message(new JmsMessage(request));
请注意,我使用的是.message()
流利的API,而不是payloadModel()
API。消息API接收Citrus消息对象,例如com.consol.citrus.jms.message.JmsMessage
或com.consol.citrus.message.DefaultMessage
您的自定义域模型对象request
用作构造函数arg,并将按原样产生JMS消息作为对象有效负载。当然,MORequest
的类型必须为java.io.Serializable