【问题标题】:wso2 esb Class Mediatorwso2 esb 类中介
【发布时间】:2012-08-31 09:58:27
【问题描述】:

您好,我通过 Carbon Studio 创建了以下类中介:

 package my.mediation;

    import org.apache.synapse.MessageContext; 
    import org.apache.synapse.mediators.AbstractMediator;

    public class Auth extends AbstractMediator { 


        public boolean mediate(MessageContext context) { 
            // TODO Implement your mediation logic here 

            context.setProperty("message","hello world!" );

            return true;
        }

}

而且顺序是这样的:

<inSequence xmlns="http://ws.apache.org/ns/synapse">
   <property name="message" value="nothing" scope="default" />
   <class name="my.mediation.Auth" />
   <log>
      <property name="Message******" expression="get-property('message')" />
   </log>
</inSequence

> 问题是它不是打印 Message: "HelloWorld" 它总是打印文本 "nothing"...有什么建议吗?

【问题讨论】:

    标签: wso2 wso2esb esb mediator


    【解决方案1】:

    您的方案完全有效,您的配置似乎也很好。

    我已经绑定了你的场景,它对我来说很好。

    以下是我的配置。

    类中介:

    package org.wso2.mediator;
    
    import org.apache.synapse.MessageContext; 
    import org.apache.synapse.mediators.AbstractMediator;
    
    public class SampleMediator extends AbstractMediator { 
    
        public boolean mediate(MessageContext context) { 
            context.setProperty("Message", "HelloWorld!");
            return true;
        }
    }
    

    我的代理服务:

    <proxy xmlns="http://ws.apache.org/ns/synapse" name="SimpleProxy"
        statistics="disable" trace="disable" transports="http,https">
        <target>
            <inSequence>
                <log category="INFO" level="simple" separator=","/>
                <property action="set" name="Message" scope="default"
                    type="STRING" value="DefaultMessage"/>
                <class name="org.wso2.mediator.SampleMediator"/>
                <log category="INFO" level="simple" separator=",">
                    <property expression="get-property('Message')" name="===========Message Value=========="/>
                </log>
                <drop/>
            </inSequence>
        </target>
    </proxy>
    

    当我在没有类中介的情况下调用代理服务时,它会打印

    INFO - LogMediator To: /services/SimpleProxy.SimpleProxyHttpSoap12Endpoint,WSAction: urn:mediate,SOAPAction: urn:mediate,MessageID: urn:uuid:81150094-cbc4-44f7-83eb-251e28149564,Direction: request,===========Message Value========== = DefaultMessage
    

    当我使用它打印的类中介调用代理服务时,

    INFO - LogMediator To: /services/SimpleProxy.SimpleProxyHttpSoap12Endpoint,WSAction: urn:mediate,SOAPAction: urn:mediate,MessageID: urn:uuid:e3a04341-907c-40fe-9f58-5a10d2ce346a,Direction: request,===========Message Value========== = HelloWorld!
    

    希望这会有所帮助!

    哈莎娜

    【讨论】:

      【解决方案2】:

      问题基于 log4j.properties。您的课程在 my.mediation 包中;这在 log4j.properties 中不存在。您需要转到 YOUR_WSO2/lib/log4j.properties 并为您的命名空间/包添加日志级别:

      ...
      log4j.logger.org.wso2=INFO
      log4j.logger.my.mediation=DEBUG
      

      您还看到了为什么来自 Harashana 的示例有效 - 他只是将包更改为 org.wso2 - 您不应该为自己的自定义调解器这样做。

      【讨论】:

      • 我不同意你的观点 :-)。我们用于调解器的包在这里无关紧要,因为我们不会从调解器本身记录此消息。中介的任务是为与日志记录无关的属性设置一个值。因此,不。这不是这里的问题。如果你用 nuvio 的包名替换我的配置,我的配置仍然可以正常工作。所以我的建议是使用我的配置并将你的配置与我的进行比较,看看有什么不同。
      • 如果我们尝试记录来自类中介本身的消息,包可能会产生影响。
      • 你是对的。没有正确查看代码,以为输出将在 Custom Mediator 内部完成。感谢您的评论。无论如何我都会留下我的答案,也许有人会从 Mediator 内部准确查看问题的日志。
      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多