---
schema_version: "1"
id: 0ae582eae8c84ac551fe771102bd77f0a8f500d4a3500cc823f1781257056618
title: Java 形式
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.8/dataweave-formats-java.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.8/dataweave-formats-java
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 68117f999e54658df31e5270ff68b2b9a5446433f1eb284f2406722fabd1c908
description: MuleSoft Documentation Site
release: "2.8"
latest: false
---
# Java 形式

MIME タイプ: `application/java`

ID: `java`

Java データ形式の場合、DataWeave は Java 値を DataWeave 値にマップしようとします。ほとんどの場合、これは DataWeave と Java のセマンティックを照合することで行われます。

## [](#java-値のマッピング)Java 値のマッピング

次の表に、Java クラスと DataWeave の型のマッピングを示します。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Java クラス</th>
<th class="tableblock halign-left valign-top">DataWeave</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.String</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Enum</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Class</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>UUID</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CharSequence</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Char</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.sql.Clob</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.io.Reader</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>long</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>double</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>short</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BigInteger</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BigDecimal</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>AtomicInteger</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>AtomicLong</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>AtomicBoolean</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.Collection</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Array</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.Iterable</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Array</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.Iterator</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Array</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.Map</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Object</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.Optional</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Null</code>​ または ​<code>Value</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.OptionalInt</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Null</code>​ または ​<code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.OptionalDouble</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Null</code>​ または ​<code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.OptionalLong</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Null</code>​ または ​<code>Number</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>byte[]</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.InputStream</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.nio.ByteBuffer</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>byte</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.lang.File</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Binary</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.Instant</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalDateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.LocalDateTime</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalDateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.sql.Timestamp</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalDateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.sql.Date</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalDateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.Date</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalDateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.ZonedDateTime</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.LocalTime</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>LocalTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.OffsetTime</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Time</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.LocalDate</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Date</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.time.ZoneOffset</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TimeZone</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.Calendar</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>java.util.XMLGregorianCalendar</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DateTime</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>*[]</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Array</code></p></td>
</tr>
</tbody>
</table>

<table><tbody><tr><td class="icon"><i class="fa icon-important" title="Important"></i></td><td class="content">表に存在しない Java クラスは、DataWeave で ​<code>JavaBean</code>​ として処理され、​<code>Object</code>​ 型としてマップされます。この場合、すべてのプロパティが Java getter から取得されます。</td></tr></tbody></table>

## [](#metadata)メタデータ

DataWeave では、Java 形式の ​`^class`​ メタデータがサポートされています。

すべての Java オブジェクトは、クラスに関連付けられます。DataWeave は、クラスをメタデータプロパティにマップして、この関連付けを保持します。

`payload.^class`​ は、​`payload`​ のクラスの名前を返します。

Java ライターは、メタデータプロパティを使用して、DataWeave 値をマップする Java クラスを検出します。つまり、DataWeave はメタデータプロパティを使用して、特定の DataWeave 値から作成される Java クラスを決定します。たとえば、式 ​`output application/java --- now() as DateTime {class: "java.util.Calendar"}`​ では、​`java.util.Calendar`​ が作成されます。

## [](#format_enum)Enum カスタム型

Java 形式では、​`Enum`​ カスタム型がサポートされています。​`java.util.Map`​ に Java ​`enum`​ 値を配置するには、DataWeave Java Module では、​`Enum`​ と呼ばれるカスタム型を定義します。 このカスタム種別により、特定の文字列を指定の ​`enum`​ 種別の名前として処理できます。Enum の Java クラス名を指定する場合、​`class`​ メタデータプロパティを使用する必要があります (例: `{gender: "Female" as Enum {class: "org.mycompany.Gender"}}`​)。

## [](#format_examples)例

次の例は、Java 形式の使用方法を示しています。

- [例: Java プロパティの値にアクセスする](#example1)
- [例: Customer オブジェクトを作成する](#example2)
- [例: 汎用型を使用する](#example3)

### [](#クラス定義)クラス定義

この Java の例では、次のクラス定義を使用します。

- [`User`](#class_user)
- [`Customer`](#class_customer)​ (​`User`​ を拡張)

User クラス:

```java
class User {
    private String name;
    private String lastName;

    public User(){

    }

    public User(String name, String lastName){
        this.name = name;
        this.lastName = lastName;
    }

    public void setName(String name){
        this.name = name;
    }

     public void setLastName(String lastName){
        this.lastName = lastName;
    }

    public String getName(){
        return name;
    }

    public String getLastName(){
        return lastName;
    }
}
```

次のクラスは ​`User`​ を拡張します。

Customer クラス:

```java
import java.util.Calendar;
class Customer extends User {
    private Calendar expirationDate;
    private User salesRepr;

    public User(){

    }

    public User(String name, String lastName,Calendar expirationDate){
        super(name,lastName);
        this.expirationDate = expirationDate;
    }

    public void setSalesRepr(User salesRepr){
        this.salesRepr = salesRepr;
    }

    public User getSalesRepr(){
        return this.salesRepr;
    }

    public void  setExpirationDate(Calendar expirationDate){
        this.expirationDate = expirationDate;
    }

    public Calendar getExpirationDate(){
        return this.expirationDate;
    }
}
```

### [](#example1)例: Java プロパティの値にアクセスする

次の例は、Java プロパティの値にアクセスする方法を示しています。

#### [](#入力)入力

`User`​ 値は、DataWeave スクリプトへの入力ペイロードとして機能します。

```groovy
new User("Leandro", "Shokida")
```

#### [](#ソース)ソース

この DataWeave スクリプトは、入力値を JSON に変換します。

```dataweave
output application/json
---
{
    a: payload.name,
    b: payload.lastName
}
```

#### [](#出力)出力

出力は、キー-値ペアを含む JSON オブジェクトになります。値は、入力 ​`User`​ オブジェクトの ​`name`​ および ​`lastName`​ 値になります。

```json
{
    "a": "Leandro",
    "b": "Shokida"
}
```

### [](#example2)例: Customer オブジェクトを作成する

次の例は、​`Customer`​ クラスのインスタンスを作成する方法を示しています。このスクリプトは、JSON 形式と MIME タイプでオブジェクトを出力します。

クラスは親クラス定義から推定されるため、内部プロパティのクラスを指定する必要はありません。

```dataweave
output application/json
---
{
    name: "Tomo",
    lastName: "Chibana",
    expirationDate: now(),
    salesRepr: {
        name: "Mariano",
        lastName: "de Achaval",
    }
} as Object {class: "Customer"}
```

### [](#example3)例: 汎用型を使用する

この例では、クラス名の汎用型のサポートを使用して、​`User`​ オブジェクトの ​`java.util.ArrayList`​ を作成します。

各インスタンスで汎用型を使用してクラスを指定する必要はありません。クラスはリストの汎用型から取得されます。

```dataweave
output application/json
---
[{
    name: "Tomo",
    lastName: "Chibana"
},
{
    name: "Ana",
    lastName: "Felissati"
},
{
    name: "Leandro",
    lastName: "Shokida"
}
] as Array {class: "java.util.ArrayList<User>"}
```

## [](#java_support)Java サポート

バージョン 2.6 以降、DataWeave は Java 17 をサポートしています。Java 17 では、 [Java 形式](https://docs.mulesoft.com/dataweave/latest/dataweave-formats-java)​に影響する制限がカプセル化とリフレクティブアクセスに追加されています。DataWeave は、Java のリフレクション API を使用して Java オブジェクトの読み取りと書き込みを行うため、アプリケーションで使用するオブジェクトが以下を含む Plain Old Java Object (POJO) であることを確認してください。

- デフォルトのコンストラクター
- すべてのプロパティの getter
- すべてのプロパティの setter

## [](#java17_examples)Java サポートの例

次の例は、Java 17 と [言語レベル 2.6](https://docs.mulesoft.com/dataweave/latest/dataweave-versioning-behavior.adoc)​ を使用して実行されます。

- [例: Java オブジェクトインスタンスを作成する](#example4)
- [例: Java プロパティの値にアクセスする](#example5)

### [](#example4)例: Java オブジェクトインスタンスを作成する

次の例では、Java オブジェクトインスタンスを作成する方法を示します。

#### [](#user-クラス)User クラス

この Java の例では、次のクラスを使用します。

```java
public class User {
   private String name;
   private String lastName;
   public User(){
   }
   public String getName(){
       return name;
   }
   public String getLastName(){
       return lastName;
   }
}
```

#### [](#dataweave-スクリプト)DataWeave スクリプト

```java
{name: "Tomo", lastName: "Chibana" } as Object {class: "User"}
```

#### [](#出力-2)出力

期待される出力は、User クラスのインスタンスです。User クラス定義に適切な setter がないため、出力は ​`IllegalAccessException`​ になります。

```java
java.lang.IllegalAccessException - class
org.mule.weave.v2.module.pojo.reader.PropertyDefinition (in module org.mule.weave.module.java) cannot access a member of class User with modifiers "private
```

### [](#example5)例: Java プロパティの値にアクセスする

次の例は、Java プロパティの値にアクセスする方法を示しています。

#### [](#item-クラス)Item クラス

この Java の例では、次のクラスを使用します。

```java
public class Item {
	private String name;
	private int quantity;

	public Item() {
	}
    public Item(String name, int quantity) {
		this.name = name;
		this.quantity = quantity;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
}
```

#### [](#入力-2)入力

new Item("Pencil", 5)

#### [](#dataweave-スクリプト-2)DataWeave スクリプト

```dataweave
output application/json
---
{
    "name": "payload.name",
    "quantity": "payload.quantity"
}
```

#### [](#出力-3)出力

期待される出力は JSON オブジェクトです。

```json
{
    "name": "Pencil",
    "quantity": "5"
}
```

Item クラス定義に適切な getter がないため、出力は ​`IllegalAccessException`​ になります。

```java
java.lang.IllegalAccessException: class
org.mule.weave.v2.module.pojo.reader.PropertyDefinition (in module org.mule.weave.module.java) cannot access a member of class Item with modifiers "private"
```

### [](#一般的なエラーのトラブルシューティング)一般的なエラーのトラブルシューティング

競合を解決するには、以下を行っていることを確認します。

- POJO 構造に従うようにクラス定義を更新する (推奨)。
- 互換性フラグ ​`com.mulesoft.dw.java.disable_set_accessible=false`​ を使用して、リフレクションオブジェクトのアクセス可能なフラグ変更を許可する。
    
    このアプローチは回避策であり、顧客ドメインクラスに対してのみ機能します。この互換性フラグの使用は、将来のバージョンでは機能しない可能性があります。

## [](#properties)Configuration のプロパティ

DataWeave では、この形式の以下の設定プロパティがサポートされています。

### [](#reader_properties)Reader のプロパティ

この形式のリーダープロパティはありません。

### [](#writer_properties)Writer のプロパティ

この形式は、出力データを書き込むための指示を提供するプロパティを受け入れます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 50.0002%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター</th>
<th class="tableblock halign-left valign-top">型</th>
<th class="tableblock halign-left valign-top">デフォルト</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>duplicateKeyAsArray</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>オブジェクト内の重複キーの値を複製されたキーに対する値の 1 つの配列に変換します。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>writeAttributes</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>キーの属性をそのキーの子キー-値のペアに変換します。属性キー名の先頭は @ になります。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#mime_types)サポートされる MIME タイプ

この形式では、次の MIME タイプがサポートされます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 100%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">MIME タイプ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>*/java</code></p></td>
</tr>
</tbody>
</table>