2010-11-18 71 views
4

我几乎试图归档,在how-to-serialize-deserialize-simple-classes-to-xml-and-back(C#)在Java中已经做了什么。如果可能的话,我想避免为每个类写一个serialize/deserialize方法。我如何序列化/反序列化XML与Woodstox StAX 2

例如,连载的一部分:

XMLOutputFactory xof = null; 
    XMLStreamWriter2 writer = null; 

    try { 
     resp.setContentType("text/plain"); 
     xof = XMLOutputFactory.newInstance(); 
     writer = (XMLStreamWriter2) // 
     xof.createXMLStreamWriter(resp.getOutputStream()); 

     writer.writeStartDocument("1.0"); 
     writer.writeStartElement("data"); 
     // 
     // Magic happens here. 
     // 
     writer.writeEndElement(); 
     writer.writeEndDocument(); 
    } catch (XMLStreamException e) { 
     e.printStackTrace(); 
     resp.sendError(1, "Problem 1 occured."); 
    } finally { 
     try { 
      writer.flush(); 
      writer.close(); 
     } catch (XMLStreamException e) { 
      e.printStackTrace(); 
      resp.sendError(2, "Problem 2 occured."); 
     } 
    } 

这个问题不是一部分,我试图通过1 1解决的问题,但可能给你什么,我试图做一个感。当我反序列化时,我还想检查输入是否有效。最终我想用序列化的形式使用XSLT转换。

回答

4

JAXB是如何将Java对象序列化为XML。下面将帮助您开始:

JAXB实现

有此标准的几种实现方式:

Woodstox StAX的2

JAXB接受许多输入/输出格式,包括StAX的。

验证

XML被转换为使用的Unmarshaller对象,并且对象被转换为XML的一个编组器。您可以设置javax.xml.validation.Schema的实例来验证这些操作期间的输入。

您也可以直接与JAXB使用的javax.xml.validation的API,检查出的一个例子如下:

XSLT

使用javax。 Java中使用xml.transform库来执行XSLT转换。 JAXB旨在使用JAXBSource和JAXBResult与这些库一起工作。

更多信息

看看我的博客:

+1

您对该主题有一系列令人印象深刻的知识。 – Margus 2010-11-19 14:11:45

+2

感谢Margus,现在我已经领导了一个XML绑定解决方案(EclipseLink MOXy)。我也是两个Java相关标准的积极成员:JAXB(http://jcp.org/en/jsr/detail?id=222)和SDO(http://jcp.org/en/jsr/detail ?ID = 235)。我强烈建议您使用Java中的标准解决方案,因为它与企业Java堆栈的其他部分更好地集成。例如,JAXB是JAX-WS(XML Web服务)和JAX-RS(RESTful Web服务)的标准绑定层。如果您需要更多信息,请告诉我。 – 2010-11-19 14:26:15

+0

@BlaiseDoughan如上所述,您如何设置Schema实例以使用JAXB解组验证整个xml,同时使用JAXB解组而不涉及2个创建验证器的步骤以验证并解析?任何指针都会有帮助 – Ajay 2013-08-21 07:37:32

0

除了全面接受的答案,这是值得注意的是Woodstox(或任何Stax2实现)实际上可以验证输入和输出;有关示例代码,请参见this blog entry。一个好处是,您还可以对Relax NG进行验证(不支持JAXB默认使用的JAXP解析器AFAIK)或DTD。

此外,还有一个名为Jackson-xml-databinder(Jackson JSON处理器的衍生产品)的新项目,该项目使用Stax2解析器(如Woodstox或Aalto)实现“mini-JAXB”(完整JAXB功能的子集)。主要好处是比JAXB实现有更强大的数据绑定部分和更好的性能;缺点是它不够成熟,并且不支持所有XML特定方面。在支持JSON和XML格式的情况下,它可能是最有用的。