0

HTTPComponentでJSONを受け取り、オブジェクトに変換するMuleプロジェクトを構築しています。私の問題は、変換されたオブジェクトのフィールドにアクセスできないことです。

私のフラックスの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>

私のポジョは:

@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] でフィールドにアクセスします

ありがとう。

4

2 に答える 2

0

あなたの問題は、フィールドへのアクセスではなく、http 応答フェーズにあると思います。Java オブジェクトを http 応答として返そうとすると、Mule は混乱します。要件に応じて、応答フェーズで戻りペイロードをよりわかりやすいものに設定してみてください。例えば

<set-payload value="#[payload.transactionCode.toString()]"/> 

また

<json:object-to-json-transformer/>
于 2014-02-12T14:02:26.297 に答える
0

アプリケーションがRestJsonHelloWorldFlow1フローを終了したら、実際にユーザーに何を返したいですか?

アントン・クピアスが言ったように、あなたの問題はタグだと思います。タグを削除して例外を解決し、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) request-response に設定された HTTP インバウンド エンドポイント

2)すぐにJSONをオブジェクトに変換します

3) 次に、必要な処理を実行する Java コンポーネントを作成しました。org.mule.api.lifecycle.Callable を実装するクラスを作成します。ペイロードからトランザクション コードを取得し、文字列型のオブジェクトを返すようにオーバーライドされたメソッドを設定します

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)次に、オブジェクトを文字列コンポーネントに追加してフローを終了しました。または、JSON オブジェクトをユーザーに返したい場合は、オブジェクトを JSON コンポーネントに配置します。

于 2014-02-12T15:19:55.423 に答える