0

私の目標はばかばかしいほど単純です。Mule の Jersey モジュールからの json 応答を、次のような JSON 応答でラップしたいだけです。

{"status": "ok", message:<json-message>}

カスタムトランスフォーマーを使用しようとしました:

<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>

変圧器クラス:

public class JsonTransformer extends AbstractTransformer {
    @Override 
    protected Object doTransform(Object src, String enc) 
    throws TransformerException {
        return "{\"status\":\"ok\", \"message\":\"" + src + "\"}";
    }
}

残念ながら、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.

なにか提案を?

4

1 に答える 1

2

と の間custom-transformer<response> ... </response>ブロックにを配置するとどうなりますか?inbound-endpointjersey:resources

編集

新しいフロー:

<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>

入力をより適切に処理するには、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) {}
    }
}
于 2012-09-26T22:45:11.033 に答える