【问题标题】:wso2 enterprise integrator Class filter get parameterwso2企业集成器类过滤器获取参数
【发布时间】:2017-10-04 23:25:48
【问题描述】:

我在 Linux 机器上安装了 WSO2 EI 6.1.1。我为获取 GET 和 PUT 请求的休息接口创建了一个直通代理。我已经设置了一个 Java 类调解器,它应该根据请求的 url 中包含的参数做出一些决定:

http://xx.xx.xx.xx:8280/services/app/url?token=ABCD

当我向班级询问请求的上下文时,我可以看到信封和请求的内容。

System.out.println("Context: \n " + context.getMessageString());

 To : /services/app/url?token=ABCD
MessageID : urn:uuid:431940fd-201e-43a3-aad1-0ca5e36297dd
Body : <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope>

如何获取token参数的值?我尝试过的任何方法都没有奏效。


更新:

这是当前序列:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="jsonvalidate" xmlns="http://ws.apache.org/ns/synapse">
    <log>
        <property expression="get-property('query.param.token')" name="token"/>
    </log>
    <property name="pass" scope="default" type="STRING" value="yes"/>
    <property expression="get-property('query.param.token')"
        name="token" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
    <class name="authzMediator.validate">
        <axis2ns15:property name="validated" value="1" xmlns:axis2ns15="http://ws.apache.org/ns/synapse"/>
        <axis2ns16:property name="validated1" value="yes" xmlns:axis2ns16="http://ws.apache.org/ns/synapse"/>
    </class>
    <log category="DEBUG">
        <property expression="get-property('token')" name="token1" xmlns:ns="http://org.apache.synapse/xsd"/>
    </log>
    <filter xmlns:ns="http://org.apache.synapse/xsd" xpath="get-property('pass') = 'yes'">
        <then>
            <class name="authzMediator.trace">
                <axis2ns17:property name="msg" value="YES" xmlns:axis2ns17="http://ws.apache.org/ns/synapse"/>
            </class>
        </then>
        <else>
            <class name="authzMediator.trace">
                <axis2ns18:property name="msg" value="NO" xmlns:axis2ns18="http://ws.apache.org/ns/synapse"/>
            </class>
            <drop/>
        </else>
    </filter>
</sequence>

我看到的是,在第一步(日志)中我看到了:

[EI-Core]  INFO - LogMediator To: /services/lsrest/clients/jordipc/3/0/14?token=patata, MessageID: urn:uuid:3b08226e-4a46-474a-8d7c-c4c786e51b4c, Direction: request, token = null

【问题讨论】:

    标签: wso2 wso2esb wso2ei


    【解决方案1】:

    您可以使用 get-property('uri.var.token') [1] 访问 token 参数的值。

    有两种方法可以使用这个值。

    (1) 将令牌作为参数传递给类中介。 按照 [2] 获取示例。

    (2) 在类中介mediate() 方法中访问此属性,如下所示。

    token = synCtx.getProperty('uri.var.token');
    

    [1]https://docs.wso2.com/display/ESB490/HTTP+Endpoint [2]https://docs.wso2.com/display/ESB490/Class+Mediator

    【讨论】:

    • 我不确定我是否做得正确。我创建了一个名为 token 和表达式 (get-property('uri.var.token')) 的属性,并尝试使用 (context.getProperty("token")) 从类中获取值。我得到 NULL 值。怎么了?
    • 能不能先把uri.var.token记录下来再传给class mediator看是否设置正确?
    • INFO - LogMediator To:/rest/path?token=pptttpptt,MessageID:urn:uuid:84909eeb-962b-4ac9-9c86-18cf07ce976c,方向:request,token = null
    • 由于这是一个查询参数而不是 url 参数,请尝试将查询参数属性设置为
    【解决方案2】:

    最终结果基于双重动作:

    1. 使用表达式值 $url:token 和名称“token”定义属性中介。

    2. 在Class mediator中调用这个函数context.getProperty("token")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多