我的项目是使用JAXB将XSD(XML模式)转换为POJO,使用cxf将填充的类转换为JSON。是否有可以采用模式的工具,并为我生成示例JSON文档?理想情况下,命令行或5行Java代码段。
功能方面,我想要一些类似于SoapUI在您提供WSDL时所做的事情(即,除其他外,从模式生成示例请求并使用?
问号预先填充所有字符串)
我基本上想要一种快速方法来检查XSD架构更改是否产生了我想要的JSON结构(所以我关心结构和类型,而不是关于值)。
注意:我不想创建JSON模式,也不能使用JSON模式而不是XSD。
答案 0 :(得分:1)
您可以直接从使用jaxb创建的类创建json。
Jaxb创建pojo类。
任何json库都可以从pojo实例创建json。
以下是步骤:
xjc
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
可以使用类似于以下内容的代码创建随机对象。请注意,此代码仅创建具有基本类型的原始类型和对象或对其他对象的引用。对于数组,列表,地图,您需要对其进行增强。
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);
}
}
使用此类的前一个示例是以下代码:
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