在WSO2 ESB中如何将text/html转为application/json并获取正常JSON数据
解决WSO2 ESB中text/html响应转正常JSON的问题
你遇到的这个情况我之前也碰到过——直接修改messageType和ContentType后得到二进制数据,是因为WSO2 ESB把整个text/html格式的响应当成了二进制内容处理,并没有自动解析里面包裹的JSON。要解决这个问题,得先把HTML标签里的JSON提取出来,再设置正确的消息类型,具体步骤如下:
步骤1:提取HTML中的JSON内容
原始响应是被<pre><code>标签包裹的JSON,我们需要先把这部分纯JSON字符串提取出来。推荐用正则表达式Mediator来做这件事,配置如下:
<regex> <pattern><![CDATA[<pre><code>(.*?)</code></pre>]]></pattern> <group>1</group> <action>replace</action> <target>body</target> </regex>
这个配置会匹配<pre><code>和</code></pre>之间的内容,并用匹配到的纯JSON字符串替换整个消息体。
步骤2:设置正确的消息类型
提取出纯JSON后,再设置消息头属性,让ESB识别这是JSON格式:
<property name="messageType" scope="axis2" type="STRING" value="application/json"/> <property name="ContentType" scope="axis2" type="STRING" value="application/json"/>
替代方案:用XSLT Mediator提取
如果你更习惯用XSLT,也可以写一个简单的XSLT脚本提取JSON内容:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/"> <xsl:value-of select="//pre/code/text()"/> </xsl:template> </xsl:stylesheet>
然后用XSLT Mediator引用这个脚本,之后再设置消息类型属性即可。
这样处理后,你就能得到正常的{"success":true,"data":"1234"} JSON响应了。
内容的提问来源于stack exchange,提问作者ashok
相关产品推荐
相关产品推荐

