gpt4 book ai didi

java - 单元测试不适用于 XSLT 变压器

转载 作者:行者123 更新时间:2023-12-01 14:48:39 26 4
gpt4 key购买 nike

我已经编写了单元测试用例来在我的 Mule 流程中单独测试消息处理器。

但是单元测试失败并出现错误

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:\EWS\myproj\src\main\resources\xslt\DataAdder.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 的一部分,将在适当的情况下初始化每个 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。

直接引用 MessageProcessor 则不会。

关于java - 单元测试不适用于 XSLT 变压器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com