我有一个基于JSON的端到端REST服务的用例,即REST客户端 - > ESB - >休息服务(全部使用JSON),我打算使用API& PayLoad工厂进行转换
在这种情况下,WSO2 ESB会在调用目标Rest服务之前将JSON转换为XML吗?
如果#1没有,那么它将如何准备MessageContext对象,它看起来像SOAPEnvevelope,Body等所有XML构造。
更新1:为了进一步澄清我的问题,我更新了我的示例API&自定义调解员
API / TestRestAPI.xml
<api xmlns="http://ws.apache.org/ns/synapse"
name="TestRestAPI"
context="/testrest">
<resource methods="POST GET">
<inSequence>
<class name="com.example.wso2.esb.mediators.custom.MyCustomerMediator"/>
<send>
<endpoint>
<address uri="http://jsonplaceholder.typicode.com/posts"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<class name="com.example.wso2.esb.mediators.custom.MyCustomerMediator"/>
<send/>
</outSequence>
</resource>
</api>
自定义中介班级
public class MyCustomerMediator extends AbstractMediator {
public boolean mediate(MessageContext context) {
System.out.println("In My Custom Mediator 44 $$" + context.getEnvelope().getBody() +"$$");
return true;
}
}
控制台输出
In My Custom Mediator 44 $$<soapenv:Body
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"/>$$
In My Custom Mediator 44 $$<soapenv:Body
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"/>$$
我在调用API时得到了正确的响应,但是打印的消息体上下文没有任何内容。 那么JSON消息存储在MessageContext中的哪个位置?
更新2 我在axis2.xml中的构建器和格式化程序配置实际上是WSO2中的默认值ESB 4.9.0 SNAPSHOT
<!--JSON Message Formatters-->
<messageFormatter contentType="application/json"
class="org.apache.synapse.commons.json.JsonStreamFormatter"/>
<!--JSON Message Builders-->
<messageBuilder contentType="application/json"
class="org.apache.synapse.commons.json.JsonStreamBuilder"/>
@ http://www.pastebin.ca/3038336提供完整的配置文件 我已将 application / json 设置为ESB API请求中的内容类型。
谢谢, 哈里什
答案 0 :(得分:0)
在Rest API的内部,您将自动获得XML格式的内容。当使用rest数据访问api时,它将自动转换为XML。
然后,您可以使用有效负载工厂介体来更改内容。然后响应将自动再次转换为json。
这就是你需要的。所以没有必要从你身边“转换”。请创建一个特定的REST API,并在有效问题的情况下将其发布在此处。
答案 1 :(得分:0)
对于您的方案,您只需先检查您的axis2.xml配置中是否包含适当的JSON消息构建器和格式化程序。 在这种情况下,将正确解析原始消息,并使用JSON调用目标服务。
还没有真正将这种格式用于ESB,但您的有效负载应该像往常一样出现在MessageContext中SOAP信封的正文中。
<强>更新强>
用给定的构建器和格式化器信封的空体看起来是预期的结果。正如我从代码中看到的那样,JSONStreamBuilder只创建空信封并在消息上下文中保存对输入流的引用:
messageContext.setProperty("JSON_STREAM", inputStream);
所以你可以用自定义中介来捕捉它:
messageContext.getProperty("JSON_STREAM");
但是如果您想要将JSON转换为XML,则需要使用JSONBuilder。