我已经编写了单元测试用例来测试我的骡子流中的消息处理器。
但是单元测试失败,报错
org.mule.api.transformer.TransformerMessagingException: Property "xsl-file or xsl-text" not set.
One or more of them must be set (org.mule.api.lifecycle.InitialisationException).
Message payload is of type: String
(org.mule.api.transformer.TransformerMessagingException). Message payload is of type: String
其中一个转换器是XSLT,如下所示。
<mule-xml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:EWSmyprojsrcmainresourcesxsltDataAdder.xsl"
name="AdderXSLT" >
</mule-xml:xslt-transformer>
单元测试方法如下所示。
MessageProcessor subFlow = muleContext.getRegistry().lookupObject("AdderXSLT");
MuleEvent result = subFlow.process(getTestEvent(getFileAsString("SamplePayloads/input.xml")));
System.out.println("The output from Event is " + result.getMessageAsString());
System.out.println("The converted XML is " + result.getMessage().getPayloadAsString());
assertNotNull(result);
assertNull(result.getMessage().getExceptionPayload());
assertFalse(result.getMessage().getPayload() instanceof NullPayload);
请告诉我这里出了什么问题
我以前遇到过类似的情况,当您不在流的上下文中执行转换器时,需要显式初始化它。为了测试xslt转换器,我使用了类似于过去的以下命令:
XsltTransformer xslt = FunctionalTestCase.muleContext.getRegistry()
.lookupObject("SuccessResponseTransformer");
xslt.setReturnDataType(DataType.STRING_DATA_TYPE);
xslt.initialise();
String result = (String) xslt.transform(srcXML);
你可以尝试这样做,或者尝试转换到XsltTransformer来初始化。
我相信这是因为当您将MP作为流的一部分执行时,它是MessageProcessorChain的一部分,该MessageProcessorChain将在适当的地方初始化每个MP。如果您看一下AbstractMessageProcessorChain - http://grepcode.com/file/repo1.maven.org/maven2/org.mule/mule-core/3.3.1/org/mule/processor/chain/AbstractMessageProcessorChain.java#AbstractMessageProcessorChain.initialise%28%29中的以下代码:
public void initialise() throws InitialisationException
{
for (MessageProcessor processor : processors)
{
// MULE-5002 TODO review MP Lifecycle
if (processor instanceof Initialisable /* && !(processor instanceof Transformer) */)
{
((Initialisable) processor).initialise();
}
}
}
注意(!instanceof Transformer)被注释掉。因此它将为您初始化XsltTransformer。