[英]Modify the JSON output with Mule and Jersey
My goal is stupidly simple. 我的目标很愚蠢。 I just want to wrap a json response from Jersey module in Mule in a JSON response such that:
我只想在Jule响应中将来自Mule的Jersey模块的json响应包装起来,这样:
{"status": "ok", message:<json-message>}
I tried to use a custom-transformer: 我试着使用自定义变换器:
<flow name="sicsRest" doc:name="sicsRest">
<inbound-endpoint address="http://localhost:65432/RestServices"
exchange-pattern="request-response" doc:name="RestEntry" />
<jersey:resources doc:name="REST">
<component doc:name="Java">
<spring-object bean="serviceImpl" />
</component>
<custom-transformer returnClass="java.lang.String"
class="com.hyperborea.sicsbus.transformer.JsonTransformer"
doc:name="JsonTransformer" />
<jersey:exception-mapper
class="com.hyperborea.sicsbus.exception.JsonRestExceptionMapper" />
</jersey:resources>
</flow>
The transformer class: 变压器类:
public class JsonTransformer extends AbstractTransformer {
@Override
protected Object doTransform(Object src, String enc)
throws TransformerException {
return "{\"status\":\"ok\", \"message\":\"" + src + "\"}";
}
}
Unfortunately it raises an exception during Mule startup: 不幸的是,它在Mule启动期间引发了异常:
org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'custom-transformer'. One of '{"http://www.mulesoft.org/schema/mule/core":abstract-component, "http://www.mulesoft.org/schema/mule/jersey":exception-mapper}' is expected.
Any suggestion? 有什么建议吗?
What if you place your custom-transformer
in a <response> ... </response>
block between the inbound-endpoint
and the jersey:resources
? 如果将
custom-transformer
放在inbound-endpoint
和jersey:resources
之间的<response> ... </response>
块中,该怎么办?
New flow: 新流程:
<flow name="sicsRest" doc:name="sicsRest">
<inbound-endpoint ... />
<response>
<custom-transformer returnClass="java.lang.String"
class="com.hyperborea.sicsbus.transformer.JsonTransformer"
doc:name="JsonTransformer" />
</response>
<jersey:resources doc:name="REST">
<component doc:name="Java">
<spring-object bean="serviceImpl" />
</component>
<jersey:exception-mapper ... />
</jersey:resources>
</flow>
The transformer has to be changed in an AbstractMessageTransformer in order to better handle the input (which is almost impossibile with AbstractTransformer): 必须在AbstractMessageTransformer中更改变换器才能更好地处理输入(使用AbstractTransformer几乎无法实现):
public class JsonTransformer extends AbstractMessageTransformer {
@Override
public Object transformMessage(MuleMessage message, String outputEncoding)
throws TransformerException {
try {
return "{\"status\":\"ok\", \"message.getPayloadAsString()\":\""
+ src + "\"}";
} catch (Exception e) {}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.