---
schema_version: "1"
id: 6e27b8a6977a4585127048d93b89592711a48a7280c338603cf20b9f279d5ae7
title: 特殊なパラメーター
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-sdk/1.1/special-parameters.md
canonical_url: https://docs.mulesoft.com/jp/mule-sdk/1.1/special-parameters
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 7d4e027275b3f4a85c83470b407eb447d00188f19758e185377ed1eea5451733
description: MuleSoft Documentation Site
release: "1.1"
latest: false
---
# 特殊なパラメーター

## [](#typedvaluetype)TypedValue<Type>

[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​および​[ソース](https://docs.mulesoft.com/jp/mule-sdk/1.1/sources)​の一般的なユースケースは、パラメーターの値と共にメディア種別情報を受け取ることです。次に例を示します。

例: 操作

```java
public void receiveContent(InputStream content) {
  // operation logic
}
```

以下の Mule アプリケーションの例では ​`JSON`​ 値を受け取りますが、上記の操作のコードでは ​`content`​ パラメーターの MIME タイプまたはエンコードが指定されていません。

例: Mule アプリケーション

```xml
<flow name="mediaTypeFlow">
    <set-payload value="#[output application/json --- { key : 'value'}]">
    <cool-extension:receive-content content="#[payload]" />
</flow>
```

メディア種別情報 (MIME タイプやエンコード) を取得するには、パラメーター種別を ​`TypedValue<OriginalType>`​ にラップする必要があります。

次の例では、​`TypedValue`​ パラメーターと共に上記と同じ Mule アプリケーションを使用します。

メディア種別フレンドリーなパラメーター

```java
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)Literal<Type>

`Literal<Type>`​ パラメーターでは、Mule アプリケーションに書き込まれたときのままの値を取得できます。つまり、エンドユーザーが ​`#[attributes.queryParams]`​ のような式を記述する場合、操作は式 ​`#[attributes.queryParams]`​ が含まれる ​`String`​ (文字列) を取得できます。これにより、Mule Runtime によって式が解決されたり、変換が適用されたりすることを回避できます。これは、サードパーティで評価する必要がある場合に役立ちます。

設定および接続プロバイダーの場合、リテラルパラメーターを使用すると、​[設定を動的ではなく静的な設定として処理できます](https://docs.mulesoft.com/jp/mule-sdk/1.1/static-dynamic-configs)​。これは、リテラルが式の場合でもリテラル値は定数になるためです。Runtime で値が自動的に評価されることはなく、拡張機能で静的値として処理されます。

値が式として入力された場合、クラスでは式が提供されますが、評価する方法は提供されません。その​[パラメーターリゾルバー](#parameter-resolver)​を使用する必要があります。

```xml
<flow name="literalFlow">
    <cool-extension:literal-value content="#[payload]" />
</flow>
```

リテラルパラメーター

```java
public void literalValue(Literal<InputStream> literal) {
    System.out.println(literal.getLiteralValue().get());  // #[payload]
    System.out.println(literal.getType()); // java.io.InputStream
}
```

<table><tbody><tr><td class="icon"><i class="fa icon-important" title="Important"></i></td><td class="content">汎用型を考慮する必要があります。このインターフェースの使用によって派生するパラメーターの型は、汎用型に応じて設定されます。汎用型は省略できません。</td></tr></tbody></table>

## [](#parameter-resolver)ParameterResolver<Type>

`ParameterResolver<Type>`​ では、操作に対する式の解決を延期できます。これは、値として式を取るパラメーターが必要でない場合に役立ちます。そのような式を自動的に解決する代わりにコネクタのコード内でオンデマンドで解決してパフォーマンスを改善できます。

[​`Literal<Type>`](#literal)​ パラメーターに対して、式が含まれる ​`ParameterResolver<Type>`​ パラメーターは、値が解決されるかどうかに関係なく、常に動的パラメーターとして処理されます。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content"><code>ParameterResolver</code>​ を設定や接続プロバイダーの内部で使用することはできません。</td></tr></tbody></table>

### [](#式の解決)式の解決

`ParameterResolver<Type>`​ を受け取って式の値を解決する場合、​`resolve()`​ メソッドをコールして、式の結果を返す必要があります。

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
<div class="ulist">
<ul>
<li>
<p>式の解決は、必要になるまで延期されるため、​<code>resolve()</code>​ は無効な式のために失敗する可能性があります。</p>
</li>
<li>
<p>パラメーターリゾルバーは、操作内でのみ使用できます。そのため、パラメーターリゾルバーを設定内で使用することはできません。</p>
</li>
</ul>
</div>
</td>
</tr>
</tbody></table>

### [](#式の値の取得)式の値の取得

`ParameterResolver<Type>`​ パラメーターは、パラメーターで使用される式を伝えることができます。パラメーターは式を使用しても、使用しなくても設定できるため、​`Optional<String>`​ が返されます。式を使用して設定されていない場合、​`Optional.empty()`​ が返されます。

#### [](#例-式を使用する)例: 式を使用する

式を使用した設定

```xml
<flow name="expressionParameterResolver">
  <cool-extension:add-products products="#[{Potatoes : 2 , Oranges : 4}]"/>
</flow>
```

例: ソース

```java
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}
}
```

#### [](#例-式を使用しない)例: 式を使用しない

式を使用しない設定

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

```java
public void addProducts(ParameterResolver<Map<String,Integer>> products) {
    System.out.println(products.getExpression().isPresent());  // false
    System.out.println(products.resolve()); // {Potatoes=2, Oranges=4}
}
```

## [](#型の積み上げ)型の積み上げ

上記のパラメーターを同時に複数使用することが必要になる場合があります。たとえば、特定の値のメディア種別を受け取り、その解決を延期する場合などです。

これを行うには、必要な機能の汎用型を積み上げます。

```xml
<flow name="stackedTypes">
  <cool-extension:add-products products="#[output application/json --- {Potatoes : 2 , Oranges : 4}]"/>
</flow>
```

```java
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"}
}
```