Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMIME タイプ: application/java
ID: java
Java データ形式の場合、DataWeave は Java 値を DataWeave 値にマップしようとします。ほとんどの場合、これは DataWeave と Java のセマンティックを照合することで行われます。
次の表に、Java クラスと DataWeave の型のマッピングを示します。
Java クラス | DataWeave |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表に存在しない Java クラスは、DataWeave で JavaBean として処理され、Object 型としてマップされます。この場合、すべてのプロパティが Java getter から取得されます。
|
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
が作成されます。
Java 形式では、Enum
カスタム型がサポートされています。java.util.Map
に Java enum
値を配置するには、DataWeave Java Module では、Enum
と呼ばれるカスタム型を定義します。
このカスタム種別により、特定の文字列を指定の enum
種別の名前として処理できます。Enum の Java クラス名を指定する場合、class
メタデータプロパティを使用する必要があります (例: {gender: "Female" as Enum {class: "org.mycompany.Gender"}}
)。
次の例は、Java 形式の使用方法を示しています。
この 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;
}
}
java
次のクラスは User
を拡張します。
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;
}
}
java
次の例は、Java プロパティの値にアクセスする方法を示しています。
User
値は、DataWeave スクリプトへの入力ペイロードとして機能します。
new User("Leandro", "Shokida")
groovy
この DataWeave スクリプトは、入力値を JSON に変換します。
output application/json
---
{
a: payload.name,
b: payload.lastName
}
dataweave
出力は、キー-値ペアを含む JSON オブジェクトになります。値は、入力 User
オブジェクトの name
および lastName
値になります。
{
"a": "Leandro",
"b": "Shokida"
}
json
次の例は、Customer
クラスのインスタンスを作成する方法を示しています。このスクリプトは、JSON 形式と MIME タイプでオブジェクトを出力します。
クラスは親クラス定義から推定されるため、内部プロパティのクラスを指定する必要はありません。
output application/json
---
{
name: "Tomo",
lastName: "Chibana",
expirationDate: now(),
salesRepr: {
name: "Mariano",
lastName: "de Achaval",
}
} as Object {class: "Customer"}
dataweave
この例では、クラス名の汎用型のサポートを使用して、User
オブジェクトの java.util.ArrayList
を作成します。
各インスタンスで汎用型を使用してクラスを指定する必要はありません。クラスはリストの汎用型から取得されます。
output application/json
---
[{
name: "Tomo",
lastName: "Chibana"
},
{
name: "Ana",
lastName: "Felissati"
},
{
name: "Leandro",
lastName: "Shokida"
}
] as Array {class: "java.util.ArrayList<User>"}
dataweave
バージョン 2.6 以降、DataWeave は Java 17 をサポートしています。Java 17 では、 Java 形式に影響する制限がカプセル化とリフレクティブアクセスに追加されています。DataWeave は、Java のリフレクション API を使用して Java オブジェクトの読み取りと書き込みを行うため、アプリケーションで使用するオブジェクトが以下を含む Plain Old Java Object (POJO) であることを確認してください。
デフォルトのコンストラクター
すべてのプロパティの getter
すべてのプロパティの setter
次の例は、Java 17 と 言語レベル 2.6 を使用して実行されます。
次の例では、Java オブジェクトインスタンスを作成する方法を示します。
この Java の例では、次のクラスを使用します。
public class User {
private String name;
private String lastName;
public User(){
}
public String getName(){
return name;
}
public String getLastName(){
return lastName;
}
}
java
{name: "Tomo", lastName: "Chibana" } as Object {class: "User"}
java
期待される出力は、User クラスのインスタンスです。User クラス定義に適切な setter がないため、出力は IllegalAccessException
になります。
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
java
次の例は、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;
}
}
java
new Item("Pencil", 5)
output application/json
---
{
"name": "payload.name",
"quantity": "payload.quantity"
}
dataweave
期待される出力は JSON オブジェクトです。
{
"name": "Pencil",
"quantity": "5"
}
json
Item クラス定義に適切な getter がないため、出力は IllegalAccessException
になります。
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"
java
競合を解決するには、以下を行っていることを確認します。
POJO 構造に従うようにクラス定義を更新する (推奨)。
互換性フラグ com.mulesoft.dw.java.disable_set_accessible=false
を使用して、リフレクションオブジェクトのアクセス可能なフラグ変更を許可する。
このアプローチは回避策であり、顧客ドメインクラスに対してのみ機能します。この互換性フラグの使用は、将来のバージョンでは機能しない可能性があります。
DataWeave では、この形式の以下の設定プロパティがサポートされています。
この形式のリーダープロパティはありません。
この形式は、出力データを書き込むための指示を提供するプロパティを受け入れます。
パラメーター | 型 | デフォルト | 説明 |
---|---|---|---|
|
|
|
オブジェクト内の重複キーの値を複製されたキーに対する値の 1 つの配列に変換します。 有効な値は、 |
|
|
|
キーの属性をそのキーの子キー-値のペアに変換します。属性キー名の先頭は @ になります。 有効な値は、 |
この形式では、次の MIME タイプがサポートされます。
MIME タイプ |
---|
|