wso2 企业集成商 Class 过滤器获取参数
wso2 enterprise integrator Class filter get parameter
我已经在 Linux 盒子上安装了 WSO2 EI 6.1.1。我已经为获取 GET 和 PUT 请求的 rest 接口创建了一个直通代理。我已经设置了一个 Java Class 调解器,它应该根据请求的 url 中包含的参数做出一些决定:
http://xx.xx.xx.xx:8280/services/app/url?token=ABCD
当我从 class 中询问请求的上下文时,我可以看到信封的内容和请求。
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>
如何获取令牌参数的值?我试过的方法都没用。
更新:
这是当前序列:
<?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
您可以使用 get-属性('uri.var.token') [1] 访问令牌参数的值。
有两种方法可以使用此值。
(1) 将令牌作为参数传递给 class 中介。
按照 [2] 获取示例。
(2) 在 class 中介 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
最终结果基于双动作:
用表达式值 $url:token
和名称 "token" 定义一个 属性 中介。
在Class调解器中调用这个函数context.getProperty("token")
我已经在 Linux 盒子上安装了 WSO2 EI 6.1.1。我已经为获取 GET 和 PUT 请求的 rest 接口创建了一个直通代理。我已经设置了一个 Java Class 调解器,它应该根据请求的 url 中包含的参数做出一些决定:
http://xx.xx.xx.xx:8280/services/app/url?token=ABCD
当我从 class 中询问请求的上下文时,我可以看到信封的内容和请求。
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>
如何获取令牌参数的值?我试过的方法都没用。
更新:
这是当前序列:
<?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
您可以使用 get-属性('uri.var.token') [1] 访问令牌参数的值。
有两种方法可以使用此值。
(1) 将令牌作为参数传递给 class 中介。 按照 [2] 获取示例。
(2) 在 class 中介 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
最终结果基于双动作:
用表达式值
$url:token
和名称 "token" 定义一个 属性 中介。在Class调解器中调用这个函数
context.getProperty("token")