我构建了Mule项目,它通过HTTPComponent接收JSON并传递给object。 我的问题是在转换对象时无法访问字段。
My flux的XML是:
<flow name="RestJsonHelloWorldFlow1" doc:name="RestJsonHelloWorldFlow1"><http:inbound-endpointexchange-pattern="request-response"
host="localhost" port="8081"
path="credit/new" doc:name="HTTP"
mimeType="application/json"/> <response>
<logger message=" #[message.payload.transactionCode]" level="INFO" doc:name="Logger"/>
</response>
<json:json-to-object-transformer doc:name="JSON to Object" returnClass="com.creditmobile.domain.Request" name="request"/></flow>
我的pojo是:
@JsonAutoDetect
public class Request {
private Integer transactionCode;
public Request() {
super();
}
public Integer getTransactionCode() {
return transactionCode;
}
我的JSON是:
{
"transactionCode": 1
}
我遇到了以下异常:
org.mule.api.transformer.TransformerMessagingException: The object transformed is of type: "SimpleDataType{type=java.lang.String, mimeType='*/*'}", but the expected return type is "SimpleDataType{type=org.mule.api.transport.OutputHandler, mimeType='application/json'}". The current MuleMessage is null! Please report this to dev@mule.codehaus.org
at org.mule.transformer.AbstractMessageTransformer.checkReturnClass(AbstractMessageTransformer.java:183)
at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:162)
at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:73)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
我看到有同样问题的其他主题,但他们没有解决方案,你的建议对我不起作用。
我使用以下命令访问字段:[message.payload.transactionCode]
感谢。
答案 0 :(得分:0)
我认为您的问题出在http响应阶段,而不是访问该字段。当您尝试将Java对象作为http响应返回时,Mule会感到困惑。根据您的要求,尝试将返回有效负载设置为响应阶段更容易理解的内容。例如
<set-payload value="#[payload.transactionCode.toString()]"/>
或
<json:object-to-json-transformer/>
答案 1 :(得分:0)
一旦应用程序退出RestJsonHelloWorldFlow1流程,您实际想要返回给用户的是什么?
我认为Anton Kupias说你的问题就是标签。我设法通过删除标记来解决异常,并将有效负载转换为完全在HTTP入站端点之后的对象。
配置XML
<flow name="RestJsonHelloWorldFlow1" doc:name="RestJsonHelloWorldFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="credit/new"
doc:name="HTTP" mimeType="application/json" />
<json:json-to-object-transformer
doc:name="JSON to Object" returnClass="com.creditmobile.domain.Request" />
<component class="com.creditmobile.domain.TransactionResponse" doc:name="Java"/>
<object-to-string-transformer doc:name="Object to String"/>
</flow>
基本上你有
1)HTTP入站端点,设置为请求 - 响应
2)立即将JSON转换为Object
3)然后我创建了一个java组件来执行所需的处理;通过创建一个实现org.mule.api.lifecycle.Callable的类。从有效负载获取事务代码并设置重写方法以返回string
类型的对象public class TransactionResponse implements Callable {
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
// Type casts payload to object Request
Request requestObject = (Request) eventContext.getMessage().getPayload();
int code = Integer.valueOf(requestObject.getTransactionCode());
String reply = "";
switch (code) {
case 1:
reply = "New";
break;
case 2:
reply = "Delete";
break;
}
return reply;
}
}
4)然后我通过添加Object to String组件来终止流程,或者如果您希望将JSON对象返回给用户,则将Object放置到JSON组件。