Rest WSO2 Synapse:设置URL参数
我试图做一些看似简单但却无法实现的事情。基本上,我希望WSO2 API管理器向REST调用添加URL参数 设置和问题 我安装了WSO2 API管理器。我还有一个Tomcat,它运行一个名为someservlet的伪servlet,它只记录它接收到的任何内容并返回ok。我在manager中添加了servlet作为API,因此我可以直接调用servlet,也可以通过WSO2 API mgr调用servlet 我能跑Rest WSO2 Synapse:设置URL参数,rest,wso2,url-parameters,synapse,wso2-am,Rest,Wso2,Url Parameters,Synapse,Wso2 Am,我试图做一些看似简单但却无法实现的事情。基本上,我希望WSO2 API管理器向REST调用添加URL参数 设置和问题 我安装了WSO2 API管理器。我还有一个Tomcat,它运行一个名为someservlet的伪servlet,它只记录它接收到的任何内容并返回ok。我在manager中添加了servlet作为API,因此我可以直接调用servlet,也可以通过WSO2 API mgr调用servlet 我能跑 curl http://localhost:8080/someservlet/ser
curl http://localhost:8080/someservlet/servlet/toto?blob=blib&secret=pass
curl -H "Authorization: Bearer [...]" --url "http://192.168.23.1:8280/someservlet/1.0/toto?blob=blib&secret=pass"
servlet工作正常,它告诉我它收到了路径/toto和参数blob和secret
我能跑
curl http://localhost:8080/someservlet/servlet/toto?blob=blib&secret=pass
curl -H "Authorization: Bearer [...]" --url "http://192.168.23.1:8280/someservlet/1.0/toto?blob=blib&secret=pass"
它的作用也完全相同。到目前为止,一切顺利
我想要的是运行:
curl -H "Authorization: Bearer MqVQuHqLNphtPV3XF1CtXVmbyP8a" --url "http://192.168.23.1:8280/someservlet/1.0/toto?blob=blib"
(请注意,我已删除了secret参数)
…并且仍然得到相同的结果
因此,基本上我希望API管理器添加URL参数secret=pass
我尝试的第一件事:财产调解人
将Synapse XML配置与属性REST\u URL\u POSTFIX一起使用
我编辑了API配置文件,并添加了
<property name="REST_URL_POSTFIX" value="/blob?toto=titi" scope="axis2" type="STRING"/>
就好像我运行了someservlet/1.0/blob?toto=titi:我所有的路径和参数都消失了,并用配置的路径和参数重新绘制。嘿,这就是它的工作原理,不是吗
问题:
<rewrite>
<rewriterule>
<action type="replace" value="pass" fragment="query" regex="foo"/>
</rewriterule>
</rewrite>
畸形的?异常堆栈跟踪中有更多详细信息:
java.net.MalformedURLException: no protocol: /someservlet/1.0/toti?blab=blib&secret=foo
因此,中介(记录或重写)接收到一条消息,其“To:”字段指向一个没有协议的URL
当然,我一直在谷歌上搜索,有些情况下我发现其他人有logMediator:To:/blabla,而其他(大多数)情况下他们有logMediator:To:http://blablabla。我真的不明白是什么造成了这种差异-(
这就是我被困的地方!!:-(
选择权
我知道可能有一个大锤式的解决方案可以工作:
谢谢阅读。有什么想法吗?据我所知,您正在尝试将
secret=pass
附加到您的端点url。
当您调用API时,我相信您正在发送该参数。
在您发送“blab=blib”
参数的同时。但是在ESB中,您需要将其更改为“toto=titi”
您使用的方法是正确的。(即:使用propertyREST\u URL\u POSTFIX
),在这种情况下,它将替换所有requets参数。
但是在使用之前,您可以保存请求参数并使用“REST\u URL\u POSTFIX”
您可以获得所需的最终REST url。(是的,这是您提到的“待尝试”的最终选项)
在“收件人”地址中,只有端口号之后才有地址。
如果您使用
“POST_TO_URI”
属性,yopu将看到日志中打印的完整地址URL,但是如果在BE服务和ESB之间配置了任何代理服务器,我们将使用该属性,我已经解决了我的问题
我是这样做的:
<property name="querystrings" expression="get-property('axis2', 'REST_URL_POSTFIX')"/>
当然,这里是XML配置的第三步:
<property name="REST_URL_POSTFIX" expression="get-property('querystrings')" scope="axis2" type="STRING"/>
所有这些基本上都在URL的末尾设置了一个参数。
希望这对其他人有所帮助。对于可能有相同问题的人,这里有另一个解决方案,更简单、更有效 转到碳管理门户,到API列表,找到相关的API并单击它。 这将导致API的XML配置。 在“地址”字段之后(在XML的同一级别)添加字段:
<property name="Authorization" value="stuff to add" scope="transport"/>
这添加了属性“Authorization”和值“stuff”。IIUC,你是在告诉我做我在“尝试选项”标题下写的事情,我会尝试。至于“to:“field,我不是在抱怨我在日志中看到的内容,是重写中介抱怨它没有得到协议。你如何向重写中介提供有效的URL,包括协议?”你是在告诉我做我在“尝试选项”标题下写的事情是的..重写中介器配置看起来不错。我检查了一下似乎有效..您使用的APIM版本是什么?我们目前正在为支持REST而工作,我们可以使用方便的URI模板动态构造端点。wrt重写中介器:我认为这不是特别的中介器,而是任何中介器或者。意思是,到达那里的消息有一个不完整的“To:”字段。只是,我认为大多数调解人不在乎。我使用的是1.2.0版。
<property name="REST_URL_POSTFIX" expression="get-property('querystrings')" scope="axis2" type="STRING"/>
<property name="Authorization" value="stuff to add" scope="transport"/>