【问题标题】:Error parsing json on mule ESB在 mule ESB 上解析 json 时出错
【发布时间】:2015-04-22 01:18:59
【问题描述】:

两天前,我的应用程序运行良好,但现在我在测试时收到错误消息,不知道问题出在哪里。知道应用程序中没有任何变化。所以我的应用程序正在侦听一个端口并等待 json 数据,然后获取这个 json 并将其发送到将发送响应的 Web 服务。

这是我的代码的 sn-p:

<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP" contentType="application/json" path="getDetails" />
<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object" />
<set-session-variable variableName="tkn" value="#[message.payload.token]" doc:name="token" />
<set-session-variable variableName="msg" value="#[message.payload.msg]" doc:name="message" />
<component doc:name="Java" class="Transformer">
    <method-entry-point-resolver>
        <include-entry-point method="methhod" />
    </method-entry-point-resolver>
</component>
<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object" />
<logger message="&quot;I can get properties this is app&quot;+#[message.payload.application]+&quot;this is the type&quot;+#[message.payload.type]" level="INFO" doc:name="Logger" />
<http:outbound-endpoint exchange-pattern="request-response" address="http://slice.ws.com/api.php/push/send_test_push" contentType="application/x-www-form-urlencoded" doc:name="HTTP" method="POST">
    <set-property propertyName="application" value="#[message.payload.application]" doc:name="Property" />
    <set-property propertyName="token" value="#[sessionVars['tkn']]" doc:name="Property" />
    <set-property propertyName="user" value="#[message.payload.user]" doc:name="Property" />
    <set-property propertyName="type" value="#[message.payload.type]" doc:name="Property" />
    <set-property propertyName="message" value="#[sessionVars['msg']]" doc:name="Property" />
</http:outbound-endpoint>
<response>
    <http:response-builder status="200" doc:name="HTTP Response Builder" />
</response>
<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object" />
<logger message="&quot;result&quot;#[message.payload.success]" level="INFO" doc:name="Logger" />

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import org.json.simple.*;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class Transformer {
    JSONObject finalObj = new JSONObject();
    public JSONObject methhod(HashMap <String, String> s) {
        Map <String, String> studentGrades = s;
        Iterator <Map.Entry <String, String>> iterator = studentGrades.entrySet().iterator();

        while (iterator.hasNext()) {
            Map.Entry <String, String> studentEntry = iterator.next();
            System.out.println(studentEntry.getKey() + " :: " + studentEntry.getValue());

            finalObj.put(studentEntry.getKey(), studentEntry.getValue());

            // iterator.remove();
        }

        System.out.println("json" + finalObj);

        return finalObj;
    }
}

错误

ERROR 2015-04-13 10:34:47,458 [[applipush].connector.http.mule.default.receiver.03] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Failed to transform from "json" to "java.lang.Object"
Code                  : MULE_ERROR-109
--------------------------------------------------------------------------------
Exception stack is:
1. Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.InputStreamReader@396e2b; line: 1, column: 2] (org.codehaus.jackson.JsonParseException)
  org.codehaus.jackson.JsonParser:1433 (null)
2. Failed to transform from "json" to "java.lang.Object" (org.mule.api.transformer.TransformerException)
  org.mule.module.json.transformers.JsonToObject:132 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.InputStreamReader@396e2b; line: 1, column: 2]
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433)
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521)
    at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

我正在通过邮递员发送这个 json 来测试应用程序:

{
    "application": "91",
    "token":"APA91bEkK-ghBivQRIm7Rs1HfvmXPZ4i7XpcYMA5NGpN4orsqT",
    "user": "1",
    "type": "Android",
    "msg": "rajeun"
}

【问题讨论】:

  • 两天前,我的应用程序运行良好,但现在当我测试时收到错误 - 这些提交之间有什么变化吗?库的任何更新?另外请在您的代码中显示您的System.out.println 的输出。
  • 应用程序 :: 91 令牌 :: APA91bEkK-ghBivQRIm7Rs1HfvmXPZ4i7XpcYMA5NGpN4orsqT 用户 :: 1 类型 :: Android msg :: rajeun json{"msg":"rajeun","application":"91","type ":"Android","user":"1","token":"APA91bEkK-ghBivQRIm7Rs1HfvmXPZ4i7XpcYMA5NGpN4orsqT"}
  • 问题在于当我收到 Web 服务的响应时,第二个 json 对象是:{"success":0,"failed":1} 我想获取变量 seccess 和失败并对此结果进行测试这就是为什么我使用 json 来反对它运行良好但现在..
  • 请用输出更新你的答案
  • 感谢您的帮助,我认为 Web 服务有问题。我会更新你。

标签: java mule esb


【解决方案1】:

问题在于发送非 json 数据的 Web 服务。

【讨论】:

    【解决方案2】:

    这是我希望它对你有用的修复,如果不是请告诉我。

    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP" contentType="application/json" path="getDetails" />
    <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object" />
    <set-session-variable variableName="tkn" value="#[message.payload.token]" doc:name="token" />
    <set-session-variable variableName="msg" value="#[message.payload.msg]" doc:name="message" />
    <component doc:name="Java" class="Transformer">
        <method-entry-point-resolver>
            <include-entry-point method="methhod" />
        </method-entry-point-resolver>
    </component>
    <logger message="&quot;I can get properties this is app&quot;+#[message.payload.application]+&quot;this is the type&quot;+#[message.payload.type]" level="INFO" doc:name="Logger" />
    <http:outbound-endpoint exchange-pattern="request-response" address="http://slice.ws.com/api.php/push/send_test_push" contentType="application/x-www-form-urlencoded" doc:name="HTTP" method="POST">
        <set-property propertyName="application" value="#[message.payload.application]" doc:name="Property" />
        <set-property propertyName="token" value="#[sessionVars['tkn']]" doc:name="Property" />
        <set-property propertyName="user" value="#[message.payload.user]" doc:name="Property" />
        <set-property propertyName="type" value="#[message.payload.type]" doc:name="Property" />
        <set-property propertyName="message" value="#[sessionVars['msg']]" doc:name="Property" />
    </http:outbound-endpoint>
    <response>
        <http:response-builder status="200" doc:name="HTTP Response Builder" />
    </response>
    <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object" />
    
    <logger message="&quot;result&quot;#[message.payload.success]" level="INFO" doc:name="Logger" /> 
    <json:object-to-json-transformer returnClass="java.util.HashMap" doc:name="Object to JSON" />
    

    【讨论】:

    • 感谢您的回复,您的代码是正确的,也是我的,但问题出在发送 Json 以外的数据的 Web 服务上。
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多