3

WSO2 ESB シーケンス テンプレートを使用して汎用検証テンプレートを生成しています。このテンプレートは単純な XML メッセージを受け取り、それをスキーマに対して検証します。Validate Mediator には、入力として 2 つのものが必要です。1 つは「sourceElement」で、もう 1 つは「schemaFilePath」です。

問題:

「sourceElement」をパラメーターとして正常に渡しましたが、呼び出しテンプレート メディエーターのパラメーターを介してスキーマ ファイル パスを渡すことができません。テンプレートで受け取ることはできますが、「検証」メディエーターでは使用できません。

注: WSO2 ESB 4.8.1 と WSO2 開発者スタジオ 3.7.0 を使用しています。

「テンプレート コード:」

<?xml version="1.0" encoding="UTF-8"?>
<template xmlns="http://ws.apache.org/ns/synapse" name="ValidateCDM">
    <parameter name="sourceElement"/>
    <parameter name="schemaFilePath"/>
    <sequence>
        <validate xmlns:ns="http://org.apache.synapse/xsd" source="$func:sourceElement">
            <schema key="$func:schemaFilePath"/>
            <on-fail>
                <makefault version="pox">
                    <reason value="Invalid Request"/>
                    <detail>Invalid Request</detail>
                </makefault>
                <payloadFactory media-type="xml" description="ErrorMessageTransformation">
                    <format>
                        <Error>
                            <ErrorCode>404</ErrorCode>
                            <ErrorMessage>Error Thrown.</ErrorMessage>
                            <ErrorException>Unknown Exception</ErrorException>
                        </Error>
                    </format>
                </payloadFactory>
                <send>
                    <endpoint key="conf:ErrorQueue.xml"/>
                </send>
            </on-fail>
        </validate>
    </sequence>
</template>

「呼び出しテンプレート メディエーター コード:」

<call-template target="ValidateCDM" description="ValidateCDM">
        <with-param xmlns:abc="http://com.example/finance/datafile" name="sourceElement" value="{//abc:Message}"/>
        <with-param name="schemaFilePath" value="conf:/Example/XSD/IncomingMessage.xsd"/>
    </call-template>

「ログの例外」

ERROR_MESSAGE : Cannot convert null to a StreamSource {org.apache.synapse.FaultHandler}
TID: [0] [ESB] [2015-01-27 10:32:50,559]  WARN {org.apache.synapse.FaultHandler} -  ERROR_DETAIL : org.apache.synapse.SynapseException: Cannot convert null to a StreamSource
    at org.apache.synapse.config.SynapseConfigUtils.handleException(SynapseConfigUtils.java:576)
    at org.apache.synapse.config.SynapseConfigUtils.getStreamSource(SynapseConfigUtils.java:77)
    at org.apache.synapse.mediators.builtin.ValidateMediator.mediate(ValidateMediator.java:146)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:77)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:129)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:78)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:196)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:328)
    at org.apache.axis2.transport.jms.JMSMessageReceiver.processThoughEngine(JMSMessageReceiver.java:200)
    at org.apache.axis2.transport.jms.JMSMessageReceiver.onMessage(JMSMessageReceiver.java:122)
    at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.handleMessage(ServiceTaskManager.java:556)
    at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:449)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
 {org.apache.synapse.FaultHandler}
4

2 に答える 2

2

$func:XXX をキーとして使用する場合は、中かっこで囲む必要があります。

<schema key="{$func:schemaFilePath}"/>

そしておそらく、ソース属性で同じことをする必要がありますか:

<validate xmlns:ns="http://org.apache.synapse/xsd" source="{$func:sourceElement}">
于 2015-01-27T07:42:22.520 に答える
1

動的なキー値を渡したいのですが、まずキー領域で許可されている X パスまたはプロパティ値を確認してください。確認して確認してください。wso2で許可されていない場合は不可ですが、まずはご確認ください。

ありがとう、アワイス・ナイーム

于 2015-01-27T06:15:22.767 に答える