---
schema_version: "1"
id: 1e067bba2a0c88b3cac66444a27e3a3e6e25c282c182713da352de8e5d06ff69
title: DataWeave スクリプトが失敗した場合のトラブルシューティング
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.3/dataweave-troubleshoot.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.3/dataweave-troubleshoot
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 98d4fbd3356cb42126b4a1b251d10b508af155fd13f1db5ecf29a783946144d7
description: MuleSoft Documentation Site
release: "2.3"
latest: false
---
# DataWeave スクリプトが失敗した場合のトラブルシューティング

失敗したスクリプトをトラブルシューティングする場合、特に本番環境では入力の変化が予測できないため、エラーを再現するためにスクリプトの実行時と同じ入力を供給することは困難です。そのため、ロガーをデバッグまたは使用してスクリプトへの入力を取得することが重要です。多くの場合、失敗は別の上流コンポーネントからの入力が有効でないために発生します。ここでは、一般的な DataWeave エラーとその解決方法を示します。

## [](#入力コンテキストとスクリプトのフォルダーへのダンプ)入力コンテキストとスクリプトのフォルダーへのダンプ

Mule 4.2.1 では、スクリプトが失敗した原因となったデータに沿ってスクリプトを追跡できるように、入力コンテキストや失敗したスクリプトをフォルダーにダンプするための実験的な機能が DataWeave に導入されています。 間違ったスクリプトが失敗するのは上流コンポーネントが無効なデータを生成した場合が多いため、このツールは受信した入力データが有効であることを確認するために特に役立ちます。

この機能を使用する手順は、次のとおりです。

1. ダンプ機能を有効にするには、次のシステムプロパティを設定します。
    
    `-M-Dcom.mulesoft.dw.dump_files=true`
2. \[省略可能\] ダンプファイルを生成するパスを指定します。
    
    `-M-Dcom.mulesoft.dw.dump_folder=<path_to_folder>`
    
    デフォルトディレクトリは ​`/tmp`​ です。

## [](#dataweave-の例外)DataWeave の例外

ここでは、ダンプファイルに見られる一般的な DataWeave 例外と、これらのエラーをトラブルシューティングするための詳細を説明します。

### [](#間違った引数)間違った引数

間違った引数で関数を呼び出すと、​`org.mule.weave.v2.exception.UnsupportedTypeCoercionException`​ 例外がスローされます。 この例外の原因としては以下が考えられます。

- [関数が Null 引数を受け付けない](#null_arg_not_accepted)​
- [MIME タイプ設定されていない](#mimetype_unset)

#### [](#null_arg_not_accepted)関数が Null 引数を受け付けない

この例外が発生する最も一般的な原因は、いずれかの引数が ​`Null`​ で、関数が ​`Null`​ を引数として受け付けないことです。この問題が発生すると、次のようなエラーメッセージが返されます。

```weave
You called the function '++' with these arguments:
  1: Null (null)
  2: String (" A text")

But it expects one of these combinations:
  (Array, Array)
  (Date, Time)
  (Date, LocalTime)
  (Date, TimeZone)
  (LocalDateTime, TimeZone)
  (LocalTime, Date)
  (LocalTime, TimeZone)
  (Object, Object)
  (String, String)
  (Time, Date)
  (TimeZone, LocalDateTime)
  (TimeZone, Date)
  (TimeZone, LocalTime)

1| payload.message ++ " A text"
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Trace:
  at ++ (line: 1, column: 1)
  at main (line: 1, column: 17)
```

この問題を解決する方法の 1 つは、​`default`​ 演算子を使用することです。たとえば、​`payload.message default "" ++ " A text"`​ を使用すると、メッセージが Null である場合には空のテキストが追加されます。

#### [](#mimetype_unset)MIME タイプ設定されていない

MIME タイプが設定されていない場合は、次のようなエラーメッセージが返されます。

```weave
You called the function 'Value Selector' with these arguments:

  1: String ("{ \"message\": 123}")
  2: Name ("message")

But it expects one of these combinations:
  (Array, Name)
  (Array, String)
  (Date, Name)
  (DateTime, Name)
  (LocalDateTime, Name)
  (LocalTime, Name)
  (Object, Name)
  (Object, String)
  (Period, Name)
  (Time, Name)

1| payload.message
   ^^^^^^^^^^^^^^^
Trace:
  at main (line: 1, column: 1)
```

ペイロードで MIME タイプが設定されていない場合、MIME タイプはデフォルトで ​`application/java`​ に設定され、コンテンツは JSON オブジェクトではなく ​`String`​ として処理されます。

### [](#スタックのオーバーフロー)スタックのオーバーフロー

関数の再帰が深すぎると、次のようなエラーがスローされます。

```weave
Stack Overflow. Max stack is 256
```

最大スタックサイズは、プロパティ ​`com.mulesoft.dw.stacksize`​ を使用して設定できます。

## [](#dataweave-の警告)DataWeave の警告

ここでは、ダンプファイルに見られる一般的な DataWeave の警告と、これらの警告を解決するための詳細を説明します。

### [](#入力の最後に達した)入力の最後に達した

この警告は、DataWeave が Unicode 非文字 ​`U+FFFF`​ を入力の最後を示す特殊文字として扱うために表示されます。

この警告を回避するには、未加工ペイロードの特殊文字を置き換えてから通常どおりに進めます。

```weave
read(payload.^raw replace "\uFFFF" with "NonChar")
```

## [](#出力が未定義の場合の不一致)出力が未定義の場合の不一致

変換とは異なり、DataWeave 式では出力形式を定義する必要がありません。これは、DataWeave は使用される式と変数に基づいて出力を推定できるためです。場合によっては、推定プロセスによって推定された型と期待される型の間に不一致が生じることがあります。この問題を解決するには、出力を明示する必要があります。この状況が発生する一般的な例として次のものがあります。

- [XML からのデータの抽出](#xml_extraction)​
- [マルチパートエントリの処理](#multipart_handling)​
- [テキストデータの操作](#manipulating_text)

### [](#xml_extraction)XML からのデータの抽出

文字列を抽出する場合 (XML ペイロードから式 ​`payload.order.product.model`​ を使用して抽出するなど)、DataWeave はペイロード形式に基づいて XML を推定します。このような場合、次のようなエラーが発生します。

```weave
"Trying to output non-whitespace characters outside main element tree (in prolog or epilog), while writing Xml at ." evaluating expression: "payload.order.product.model".
```

このようなエラーが発生する場合は、出力形式を明示する必要があります。たとえば、​`output text/plain --- payload.order.product.model`​ のようにします。

### [](#multipart_handling)マルチパートエントリの処理

特定の構造を持つマルチパートデータでは、一般的な推定エラーが発生します。マルチパートペイロードと式 ​`dw::core::Objects::keySet(payload.parts)`​ について考えてみます。明示的な出力形式がなければ、DataWeave はペイロード種別に基づいて、マルチパートコンテンツを出力すると推定します。この場合、次のようなエラーがスローされます。

```weave
"Expecting type is {
  preamble?: String,
  parts: {
    _*: {
      headers: Object,
      content: Any
    }
  }
} but got Array, while writing MultiPart.
Trace:
  at main (Unknown)" evaluating expression: "dw::core::Objects::keySet(payload.parts)".
```

この問題を解決するには、出力形式を定義する必要があります。たとえば、​`output application/json --- dw::core::Objects::keySet(payload.parts)`​ のようにします。

### [](#manipulating_text)テキストデータの操作

テキストデータを使用して、より複雑なオブジェクトを作成できます。ただし、入力テキストデータに対して出力形式を定義しないと、DataWeave は出力にプレーンテキストライターを使用すると推定します。たとえば、式 ​`payload splitBy ' '`​ は次のようなエラーで失敗します。

```weave
"Text plain writer is unable to write Array.
Reason:
Cannot coerce Array (org.mule.weave.v2.model.values.ArrayValue$ArraySeqArrayValue@1331b353) to String
Trace:
  at main (Unknown), while writing TextPlain.
Trace:
  at main (Unknown)" evaluating expression: "payload splitBy ' '".
```

出力を明示することで問題が解決します。たとえば、​`output application/java --- payload splitBy ' '`​ のようにします。