我们已经安装了WSO2应用程序接口管理器1.6,并希望在其背后有一个RESTful We服务。但是当我们向we服务发送一个JSON数组时,它会被修改。
我们使用axis2.xml_PT,因为我们只是想要传递消息。在Publisher中,我将端点设置为URL端点,并将“格式”和“优化”选项设置为“保留原样”。但是当我运行这个命令时:
curl -H "Content-Type: application/json" -k -d '[{"price":"9,99"},{"price":"24,99"}]' -v 'http://our.url.here:8280/calle/0.1/'这是发送到API管理器后面的what服务的内容(使用nc -l 1234捕获)
POST http://10.87.16.127:1234/ HTTP/1.1
Content-Type: application/json
Accept: */*
activityID: 1277246320952979749505377
Transfer-Encoding: chunked
Host: 1.2.3.4:1234
Connection: Keep-Alive
User-Agent: Synapse-PT-HttpComponents-NIO
33
{"xmlPayload":[{"price":"9,99"},{"price":"24,99"}]}
0"xmlPayload“是从哪里来的?我不希望消息被读取或修改,只需要传递。
如何才能获得所需的行为?在发布JSON对象而不是数组时,它似乎工作得很好。
更新1:如果我使用Content-Type: text/plain,消息将原封不动地传递。
更新2:我像这样编辑了axis2.xml,消息通过了。这是正确的做法吗?
$ diff -Nur axis2.xml.bup axis2.xml
--- axis2.xml.bup 2014-09-18 11:12:04.851000719 +0000
+++ axis2.xml 2014-09-18 11:26:29.421472188 +0000
@@ -167,7 +167,7 @@
<!--JSON Message Formatters-->
<messageFormatter contentType="application/json"
- class="org.apache.axis2.json.JSONMessageFormatter"/>
+ class="org.apache.axis2.format.PlainTextFormatter"/>
<!--messageFormatter contentType="application/json"
class="org.apache.axis2.json.JSONStreamFormatter"/-->
<messageFormatter contentType="application/json/badgerfish"
@@ -229,7 +229,7 @@
<!--JSON Message Builders-->
<messageBuilder contentType="application/json"
- class="org.apache.axis2.json.JSONBuilder"/>
+ class="org.apache.axis2.format.PlainTextBuilder"/>
<!--messageBuilder contentType="application/json"
class="org.apache.axis2.json.JSONStreamBuilder"/-->
<messageBuilder contentType="application/json/badgerfish"发布于 2016-08-08 18:04:06
如果您需要在不接触它们的情况下传递JSON请求负载,您可以使用以下配置。然后,它将传递请求负载,而不会根据任何特定的内容类型进行构建。通常,对于未知的数据类型,以及当您只想通过而不根据特定类型进行构建时,我们建议使用此构建器格式化程序。
<messageBuilder contentType="text/json"
class="org.wso2.carbon.relay.BinaryRelayBuilder"/>请让我们知道上述解决方案是否有效。
https://stackoverflow.com/questions/25908183
复制相似问题