当前位置: 首页 > 知识库问答 >
问题:

从XSD XML模式(使用JAXB)生成示例JSON文档的快速而简单的方法是什么?

方增
2023-03-14

我的项目使用JAXB将XSD(XML模式)转换为POJO,并使用cxf将填充的类转换为JSON。有没有一个工具可以获取模式,并为我生成一个示例JSON文档?最好是命令行,或者是5行Java代码段。

从功能上来说,我想要一些类似于SoapUI在给它提供WSDL时所做的事情(即,除其他外,从架构中生成一个示例请求,并用预填充所有字符串?问号)。

我基本上想要一种快速的方法来检查XSD模式的更改是否产生了我想要的JSON结构(因此我关心的是结构和类型,而不是值)。

注意:我不想创建JSON模式,也不能用JSON模式代替XSD。

共有1个答案

牛凌
2023-03-14

您可以直接从使用jaxb创建的类创建json。

jaxb创建pojo类。

任何json库都可以从pojo实例创建json。

以下是步骤:

  • 创建您的xsd
  • 使用工具xjc
  • 创建类的实例
  • 将实例传递到pojo库并从中创建一个字符串

这里有一个更快的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
 类似资料:
  • 本文向大家介绍Python快速从注释生成文档的方法,包括了Python快速从注释生成文档的方法的使用技巧和注意事项,需要的朋友参考一下 作为一个标准的程序猿,为程序编写说明文档是一步必不可少的工作,如何才能写的又好又快呢,下面我们就来详细探讨下吧。 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等。 一看别人专业的大牛们写的文档多

  • 本文向大家介绍Codeigniter生成Excel文档的简单方法,包括了Codeigniter生成Excel文档的简单方法的使用技巧和注意事项,需要的朋友参考一下 之前看了使用PHPExcel中导出数据到Excel文件的方法,但是似乎比较复杂。icech找到了一个针对Codeigniter的类:CI-Excel-Generation-Library,使用方法十分简单。 1、下载CI-Excel-G

  • 问题内容: 我正在寻找一个有关如何通过jQuery.Ajax检索JSon数据时如何使用SlickGrid的简单示例。我也找不到SlickGrid插件的任何文档,并且想知道我是否在错误的位置。任何帮助我开始使用SlickGrid的帮助将不胜感激。 问题答案: 一个asp.net页面中的例子。Web服务返回一个需要与网格列匹配的json字符串。 … 等等 在Asp.Net中,默认情况下json字符串的

  • 本文向大家介绍Android 实现夜间模式的快速简单方法实例详解,包括了Android 实现夜间模式的快速简单方法实例详解的使用技巧和注意事项,需要的朋友参考一下 ChangeMode 项目地址:ChangeMode Implementation of night mode for Android. 用最简单的方式实现夜间模式,支持ListView、RecyclerView。 Preview Us

  • 本文向大家介绍PHP单例模式是什么 php实现单例模式的方法,包括了PHP单例模式是什么 php实现单例模式的方法的使用技巧和注意事项,需要的朋友参考一下 一、什么是单例模式? 1、含义       作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 2、单例模式的三个要点: (1).

  • 本文向大家介绍java使用dom4j生成与解析xml文档的方法示例,包括了java使用dom4j生成与解析xml文档的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java使用dom4j生成与解析xml文档的方法。分享给大家供大家参考,具体如下: xml是一种新的数据格式,主要用于数据交换。我们所用的框架都有涉及到xml。因此解析或生成xml对程序员也是一个技术难点。这里就用do