0

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

トランスフォーマーの 1 つは、以下に示す 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);

ここで何が間違っているのかを理解するのを手伝ってください。

4

1 に答える 1

1

フローのコンテキスト内でトランスフォーマーを実行していないときにトランスフォーマーを明示的に初期化する必要がある場合に、以前に似たようなものに遭遇しました。私が使用したxsltトランスフォーマーをテストするために、以下のようなものがあります。

XsltTransformer xslt = FunctionalTestCase.muleContext.getRegistry()
                .lookupObject("SuccessResponseTransformer");
        xslt.setReturnDataType(DataType.STRING_DATA_TYPE);
        xslt.initialise();

        String result = (String) xslt.transform(srcXML);

このようなことを試すか、XsltTransformerにキャストして初期化してみてください。

これは、フローの一部としてMPを実行すると、必要に応じて各MPを初期化するMessageProcessorChainの一部であるためだと思います。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を直接参照することはできません。

于 2013-02-27T19:37:26.607 に答える