Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerResult オブジェクトにより、出力の mimeType を設定できます。ただし、この設定は省略可能です (SDK 開発者には、mimeType の設定は求められていません)。
一方で、操作の出力 mimeType が必須である次のようなケースもあります。
操作が String を返す場合。
操作が InputStream を返す場合。
この制限は任意ではありません。Mule 4 は DataWeave を式言語として使用するため、ユーザーはデータの形式を気にする必要はありません。気にする必要があるのは、構造のみです。ただし、DataWeave が Mule メッセージで伝達されるすべての値のメディア種別を判断できればよいのです。
SDK は、DataWeave が自動的に必要な情報を得られるように作業の大半を処理しますが、操作で String などの汎用型が返された場合は、データが JSON なのか、XML なのか、あるいはプレーンテキスト形式なのかを知ることは不可能です。InputStream が返された場合も同様で、JSON、XML、または CSV ストリーム、あるいはバイナリ情報の可能性もあります。いずれのケースでも、開発者はデザイン時にこの情報を SDK に対して指定する必要があります。
そのために @MediaType アノテーションが用意されています。String または InputStream を返すすべてのソースと操作は、MediaType を / に指定してある場合でも、このアノテーションを使用する必要があります。
たとえば、顧客に関する情報を返す操作を開発しているとします。また、この操作は XML 形式で情報を返すものとします。この場合は、次のように定義できます。
@MediaType(MediaType.APPLICATION_XML)
public String getCustomerInfo(String customerId) {
return fetchCustomerXml(customerId);
}
また、ビデオを mp4 形式で返すビデオストリーミングモジュールを開発している場合なら、次のようになります。
@MediaType("video/mp4")
public InputStream getVideo(String videoId) {
return getVideoStream(videoId);
}
@MediaType アノテーションは、最も一般的なメディア種別に対して定数セットを定義しています。ただし、ビデオメディア種別の例に示されているように、必要なカスタム mediaType を使用することもできます。
|
上記の例では、操作は指定されている以外のメディア種別を返すことはできません。しかし、最も可能性の高いメディア種別しか分からない場合や、mediaType を特定できない場合もあります。このようなケースに備えて、@MediaType アノテーションには strict = false オプションが用意されています。
顧客情報を取得する操作の例に戻り、接続先のサービスがデフォルトでは XML を返し、さらに、異なる形式を使用するように特定のアカウントを設定することもできるとします。また、そのメディア種別を事前に知ることはできないとします。この場合は、次のように定義できます。
@MediaType(value = MediaType.APPLICATION_XML, strict = false)
public String getCustomerInfo(String customerId) {
return fetchCustomerXml(customerId);
}
strict パラメーターを false に設定すると、outputMimeType パラメーターが自動的に操作に追加されます。このパラメーターにより、モジュールのユーザーは mimeType を手動で上書きできます。そのため、自分のアカウントを知っていて、JSON を使用するように設定されているユーザーであれば、次のように指定できます。
<customers:get-customer-info customerId="999" outputMimeType="application/JSON" />
HTTP 要求のケースを考えてみましょう。取得されるメディア種別はヒットするエンドポイントによって変わります。取得するメディア種別が不明であるため、ANY (/) を使用します。
@MediaType(value = "*/*", strict = false)
public InputStream request(String path) {
return httpClient.request(path);
}
ここでも、strict = false 属性によって、ユーザーはエンドポイントに応じて mimeType を手動で設定できます。
<http:request path="/customer/999" outputMimeType="application/JSON" />
自動的に追加される outputMimeType パラメーターは省略可能であり、デフォルト値はありません。ユーザーは、このパラメーターを空白のままにしておけます。その場合、SDK はアノテーションで設定されているメディア種別を使用します。
|