代码之家  ›  专栏  ›  技术社区  ›  walnutmon

JAXB工作流程-如何使用JAXB

  •  8
  • walnutmon  · 技术社区  · 14 年前

    我有一个XSD,如果我想使用JAXB来封送和取消封送,那么工作流是什么?

    我不需要任何细节,只是一个高层次的看法。

    我已经知道: 三。XJC基于XSD为您创建类


    第二,不管这个工具是什么,它是如何到达我的机器的,我如何使它与最新版本的JAXB一起运行?

    我主要习惯于使用XML和xStream之类的东西来手动解组,但这不再是我的选择。

    2 回复  |  直到 14 年前
        1
  •  15
  •   nos    14 年前

    JDK随jaxb而来,而在jaxb中可能有更新的版本 http://jaxb.java.net/

    JAXB可以做很多事情,我不完全确定你到底想要完成什么。如果您有一个xsd,您可以通过运行。

    xjc -p com.mypackage myschema.xsd
    

    并在项目中包含生成的类(更典型的情况是,在构建过程中运行这些类)。

    或者我可以定义对象到XSD的映射吗 不是一些默认的代码生成?

    生成的类只是带有一些注释的pojo,您可以自己创建这些类,并通过注释完全控制映射。

    如前所述,jaxb可以做很多事情,这里只是一些基本的示例,SearchParam/SearchType是xjc从一个小型custom.xsd生成的类

    将对象序列化为XML文件

    JAXBContext context = JAXBContext.newInstance(SearchParam.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    List<String> hours = new LinkedList<String>();
    hours.add("2009.12.11");
    hours.add("2009.12.13");
    
    SearchParam param = new SearchParam();
    param.setFilter("greater");
    param.setHours(hours);
    param.setSearchType(SearchType.Fuzzy);
    marshaller.marshal(param, new FileWriter("/tmp/SearchParam.xml"));    
    

    反序列化xml文件

     JAXBContext context = JAXBContext.newInstance(SearchParam.class);
     Unmarshaller unMarshaller = context.createUnmarshaller();
     SearchParam param = (SearchParam) unMarshaller.unmarshal(
                        new FileInputStream("/tmp/SearchParam.xml"));
    

    JAXBContext context = JAXBContext.newInstance(SearchParam.class);
    Unmarshaller unMarshaller = context.createUnmarshaller();
    Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
                     .newSchema(new  File("/tmp/schema1.xsd"));
    unMarshaller.setSchema(schema);
    SearchParam param = unMarshaller.unmarshal(
                          new FileInputStream("/tmp/SearchParam.xml"));
    

    更多信息

        2
  •  1
  •   bdoughan    14 年前

    很可能您已经安装了XJC。检查jdk6安装的bin目录。一旦发现,如果您只运行XJC,它将为您提供命令行选项。

    如果修改模式,就可以调整对象模型,尤其是使用MOXy扩展。

    http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted