【问题标题】:WSO2 PayloadFactory is sending json wrapped with jsonObjectWSO2 PayloadFactory 正在发送用 jsonObject 包装的 json
【发布时间】:2014-12-08 02:56:46
【问题描述】:

我正在使用 WSO2 API Manager 1.7.0 并且正在做一个简单的 payloadfactory 尝试将调用从 GET 转换为 POST 并传入 json 有效负载。

但是,当我查看日志文件时,似乎 WSO2 正在发送用 {"jsonObject": [myjson] } 包装的 json

我是 WSO2 的新手,不确定我需要使用什么配置设置来阻止这种情况。我认为这是一个配置设置,因为在我发现的任何示例或文档中都没有其他人提到这一点。

我的 api 是这样的:

"POST http://localhost:81/Service/ProcessRequest HTTP/1.1[\r][\n]" 
"Authorization: Basic asdfadfadfadfadfadfadfa=[\r][\n]" 
"Accept-Encoding: gzip,deflate[\r][\n]" 
"Content-Type: application/json[\r][\n]" 
"activityID: 2342342342342342342342342[\r][\n]" 
"Transfer-Encoding: chunked[\r][\n]" 
"Host: localhost:81[\r][\n]" 
"Connection: Keep-Alive[\r][\n]" 
"User-Agent: Synapse-PT-HttpComponents-NIO[\r][\n]" 
"[\r][\n]" 
I/O session http-outgoing-2-3 11.11.11.11:12345<->192.168.1.1:8080[ACTIVE][rw:w]: 0 bytes written 
http-outgoing-2: Produce output 
I/O session http-outgoing-2-3 11.11.11.11:12345<->192.168.1.1:8080[ACTIVE][rw:w]: 230 bytes written 
"db[\r][\n]" 
"{"jsonObject":{"UserType":"User"}}[\r][\n]" 
"0[\r][\n]" 
"[\r][\n]" 

似乎适用于服务调用的日志文件部分如下所示:

<api name="admin--JJJJJ" context="/jjjjj" version="v1.0" version-type="url">
    <resource methods="GET" url-mapping="/documents">
        <inSequence>
            <payloadFactory media-type="json">
                <format>{"UserType":"User"}</format>
                <args/>
            </payloadFactory>
            <property name="Authorization" expression="fn:concat('Basic ', base64Encode('user:password'))" scope="transport"/>
            <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
            <property name="messageType" value="application/json" scope="axis2"/>
            <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
            <log>
                <property name="JSON-Payload" expression="json-eval($.)"/>
            </log>

            <send>
                 <endpoint name="admin--JJJJJ_APIproductionEndpoint_0">
                     <http trace="enable" method="post" uri-template="http://localhost:81/Service/ProcessRequest"></http>
                 </endpoint>
             </send>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
    </resource>
    <handlers>
...
    </handlers>
</api>

我不确定 db 和 0 在传输中来自何处,但我从服务返回的错误似乎是由包装 jsonObject 引起的。

是否有人对我如何防止这种包装或在发送它之前修改有效负载以将其删除有任何提示或想法。或者我猜想一种更好甚至不同的方式将 GET 请求转换为带有 json 有效负载的 POST。

感谢您对我做错的任何提示。

【问题讨论】:

标签: api wso2 jsonobject wso2-am


【解决方案1】:

将axi2.xml (/repository/conf/axis2/axis2.xml)文件中的messageformater改成

<messageFormatter contentType="application/json" class="org.apache.synapse.commons.json.JsonStreamFormatter"/>

并注释 json 的默认消息格式化程序

<!--messageFormatter contentType="application/json" class="org.apache.axis2.json.JSONMessageFormatter"/-->

在此处了解有关 json 支持的更多信息[1]

https://docs.wso2.com/display/ESB480/JSON+Support

【讨论】:

    【解决方案2】:

    您可以在发送调解器之前向 api 添加丰富的调解器,以从正文中删除 jsonObject 包装器,如下所示。

    <enrich>
        <source clone="true" xpath="$body//jsonObject//UserType"/>
        <target type="body"/>
    </enrich>
    

    您可以在丰富中介后添加日志中介并检查更改的正文。

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多