2016-11-25 4 views
1

私のプロジェクトでは、JAXBを使用してXSD(XMLスキーマ)をPOJOに変換し、cxfを使用して、入力されたクラスをJSONに変換しています。スキーマを取るツールがありますか、私のためのサンプルJSONドキュメントを生成しますか?理想的にはコマンドラインまたは5行のJavaスニペット。JAXBを使用してXSD XMLスキーマからサンプルJSONドキュメントを生成するための素早く簡単な方法は何ですか?

SoapUIがWSDLをフィードするとき(つまり、スキーマからサンプルリクエストを生成し、すべての文字列に?の疑問符をあらかじめ設定しておくなど)、SoapUIの機能に似たものが欲しいです。

私は基本的に、XSDスキーマの変更によって、私が望むJSON構造が生成されているかどうかを確認する必要があります(値についてではなく、構造と型について気にしています)。

NB:JSONスキーマを作成したくないため、XSDではなくJSONスキーマを使用できません。

答えて

1

jaxbで作成したクラスから直接jsonを作成できます。

Jaxbはpojoクラスを作成します。

すべてのjsonライブラリは、pojoインスタンスからjsonを作成できます。ここで

手順は次のとおりです。

  • あなたのxsdを作成
  • はツールxjc
  • を使用して、XSDからクラスを作成するクラス
  • のインスタンスを作成しますPOJOライブラリにインスタンスを渡しますそれからStringを作成してください。

faster jackson:ランダムなオブジェクトを作成する

ObjectMapper mapper = new ObjectMapper(); 

// PojoClass is the class created with xjc from your xsd 
PojoClass pojoInstance = new PojoClass(); 

// Populate pojoInstance as needed 

String jsonString = mapper.writeValueAsString(pojoInstance); 
System.out.println(jsonString); // Print the pojoInstance as json string 

は、次のようなコードで行うことができます。このコードでは、プリミティブ型とプリミティブ型を持つオブジェクトまたは他のオブジェクトへの参照のみを作成します。あなたがそれを強化するために必要な配列、リスト、マップについては、 (私は最適化したい...残念ながら

ObjectMapper mapper = new ObjectMapper(); 

RandomObjectFiller randomObjectFiller = new RandomObjectFiller(); 

// PojoClass is the class created with xjc from your xsd 
PojoClass pojoInstance = randomObjectFiller.createAndFill(PojoClass.class); 

String jsonString = mapper.writeValueAsString(pojoInstance); 
System.out.println(jsonString); // Print the pojoInstance as json string 
+0

、単にデフォルト/ランダムな値を使用するのではなく、POJO移入するために私を必要とします。

public class RandomObjectFiller { private Random random = new Random(); public <T> T createAndFill(Class<T> clazz) throws Exception { T instance = clazz.newInstance(); for(Field field: clazz.getDeclaredFields()) { field.setAccessible(true); Object value = getRandomValueForField(field); field.set(instance, value); } return instance; } private Object getRandomValueForField(Field field) throws Exception { Class<?> type = field.getType(); if(type.equals(Integer.TYPE) || type.equals(Integer.class)) { return random.nextInt(); } else if(type.equals(Long.TYPE) || type.equals(Long.class)) { return random.nextLong(); } else if(type.equals(Double.TYPE) || type.equals(Double.class)) { return random.nextDouble(); } else if(type.equals(Float.TYPE) || type.equals(Float.class)) { return random.nextFloat(); } else if(type.equals(String.class)) { return UUID.randomUUID().toString(); } return createAndFill(type); } } 

このクラスを使用して、前の例では、以下のコードであります怠惰のため... ;-) – Christian

+0

@Christianあなたの問題はオブジェクトをjsonに変換するのではなく、どのようにオブジェクトにランダムな値を設定するのですか? –

+0

いいえ、それは両方です。あなたの答えは私の質問に約50%答えました... ;-) – Christian

関連する問題