Flex Gateway新着情報
Governance新着情報
Monitoring API Managerpublic void receiveContent(InputStream content) {
// operation logic
}
以下の Mule アプリケーションの例では JSON
値を受け取りますが、上記の操作のコードでは content
パラメーターの MIME タイプまたはエンコードが指定されていません。
<flow name="mediaTypeFlow">
<set-payload value="#[output application/json --- { key : 'value'}]">
<cool-extension:receive-content content="#[payload]" />
</flow>
メディア種別情報 (MIME タイプやエンコード) を取得するには、パラメーター種別を TypedValue<OriginalType>
にラップする必要があります。
次の例では、TypedValue
パラメーターと共に上記と同じ Mule アプリケーションを使用します。
public void receiveContent(TypedValue<InputStream> content) {
DataType dataType = content.getDataType();
MediaType mediaType = dataType.getMediaType();
boolean streamType = dataType.isStreamType();
Long length = content.getLength().orElse(-1L);
InputStream theContent = content.value(); // The proper value
System.out.println(mediaType); // application/json; UTF-8
System.out.println(streamType); // true
System.out.println(length); // 18
}
これに連動する他のシステムと通信したり、パラメーター値を処理できるようにしたりするために MIME Type
情報が必要なユースケースでは、TypedValue
パラメーターを使用することを強くお勧めします。
Literal<Type>
パラメーターでは、Mule アプリケーションに書き込まれたときのままの値を取得できます。つまり、エンドユーザーが #[attributes.queryParams]
のような式を記述する場合、操作は式 #[attributes.queryParams]
が含まれる String
(文字列) を取得できます。これにより、Mule Runtime によって式が解決されたり、変換が適用されたりすることを回避できます。これは、サードパーティで評価する必要がある場合に役立ちます。
設定および接続プロバイダーの場合、リテラルパラメーターを使用すると、設定を動的ではなく静的な設定として処理できます。これは、リテラルが式の場合でもリテラル値は定数になるためです。Runtime で値が自動的に評価されることはなく、拡張機能で静的値として処理されます。
値が式として入力された場合、クラスでは式が提供されますが、評価する方法は提供されません。そのパラメーターリゾルバーを使用する必要があります。
<flow name="literalFlow">
<cool-extension:literal-value content="#[payload]" />
</flow>
public void literalValue(Literal<InputStream> literal) {
System.out.println(literal.getLiteralValue().get()); // #[payload]
System.out.println(literal.getType()); // java.io.InputStream
}
汎用型を考慮する必要があります。このインターフェースの使用によって派生するパラメーターの型は、汎用型に応じて設定されます。汎用型は省略できません。 |
ParameterResolver<Type>
では、操作に対する式の解決を延期できます。これは、値として式を取るパラメーターが必要でない場合に役立ちます。そのような式を自動的に解決する代わりにコネクタのコード内でオンデマンドで解決してパフォーマンスを改善できます。
Literal<Type>
パラメーターに対して、式が含まれる ParameterResolver<Type>
パラメーターは、値が解決されるかどうかに関係なく、常に動的パラメーターとして処理されます。
ParameterResolver を設定や接続プロバイダーの内部で使用することはできません。
|
ParameterResolver<Type>
を受け取って式の値を解決する場合、resolve()
メソッドをコールして、式の結果を返す必要があります。
|
ParameterResolver<Type>
パラメーターは、パラメーターで使用される式を伝えることができます。パラメーターは式を使用しても、使用しなくても設定できるため、Optional<String>
が返されます。式を使用して設定されていない場合、Optional.empty()
が返されます。
<flow name="expressionParameterResolver">
<cool-extension:add-products products="#[{Potatoes : 2 , Oranges : 4}]"/>
</flow>
public void addProducts(ParameterResolver<Map<String,Integer>> products) {
System.out.println(products.getExpression().get()); // #[{Potatoes : 2 , Oranges : 4}]
System.out.println(products.resolve()); // {Potatoes=2, Oranges=4}
}
<flow name="noExpressionParameterResolver">
<cool-extension:add-products>
<cool-extension:products>
<cool-extension:product key="Potatoes" value="2"/>
<cool-extension:product key="Oranges" value="4"/>
</cool-extension:product>
</cool-extensions:add-products>
</flow>
public void addProducts(ParameterResolver<Map<String,Integer>> products) {
System.out.println(products.getExpression().isPresent()); // false
System.out.println(products.resolve()); // {Potatoes=2, Oranges=4}
}
上記のパラメーターを同時に複数使用することが必要になる場合があります。たとえば、特定の値のメディア種別を受け取り、その解決を延期する場合などです。
これを行うには、必要な機能の汎用型を積み上げます。
<flow name="stackedTypes">
<cool-extension:add-products products="#[output application/json --- {Potatoes : 2 , Oranges : 4}]"/>
</flow>
public void addProducts(ParameterResolver<TypedValue<InputStream>> products) {
System.out.println(products.getExpression().get()); // #[output application/json --- {Potatoes : 2 , Oranges : 4}]
TypedValue<InputStream> content = products.resolve();
System.out.println(content.getValue()); // {"Potatoes" : "2", "Oranges" : "4"}
}