2015-01-27 2 views
3

WS02 ESB 시퀀스 템플릿을 사용하여 일반 유효성 검사 템플릿을 생성하고 있습니다. 이 템플릿은 간단한 XML 메시지를 받고 스키마에 대해 유효성을 검사합니다. Validate Mediator는 입력으로 두 가지를 요구합니다. 하나는 "sourceElement"이고 다른 "schemaFilePath"WSO2 ESB 시퀀스 템플릿 오류

가 문제입니다 :

내가 성공적으로 매개 변수로 "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} 

답변

2

$ FUNC :

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

그리고 perharps 당신이 소스 속성과 같은 일을 어떻게해야합니까 : 키로서 사용하는 경우 XXX가 괄호로 묶어야합니다

<validate xmlns:ns="http://org.apache.synapse/xsd" source="{$func:sourceElement}"> 
+0

감사합니다. 그것은 효과가 있었다. 두 가지 접근 방식의 차이점에 대해 설명해주십시오. 나는 "sourceElement"괜찮아지고 있었지만, 나는 "스키마"키에 문제가 있었다. 그러나 당신의 방법으로 그것은 매력처럼 작동했습니다. –

+1

템플릿 매개 변수가 xslt 조정자의 키로 사용될 때 중괄호를 사용해야한다는 것을 알고 있습니다 ... –

+0

ok. 당신의 도움을 주셔서 감사합니다. –

1

동적 키 값을 전달하려고하지만 먼저 주요 영역에서 허용되는 x- 경로 또는 속성 값을 확인하십시오. 확인하고 확인하십시오. wso2가 허용하지 않으면 가능하지 않지만 먼저 확인하십시오.

감사합니다, Awais 나임