当前位置:编程学习 > JAVA >>

JAXB使用经验总结

使用JAXB首先要知道它是干什么的
   当然,切入正题
      很多时候我们需要把认知世界转化为我们熟悉的java对象,以供方便操作。这里,JAXB可以把xml对象转化为我们的java对象,也可以把java对象转化为xml对象。这时候我们就得知道它的两个转化方法。
      一个是unmarshal(),一个是marshal()

unmarshal()是把xml对象转化为我们需要的java对象的方法,自然marshal()是把java对象转化为xml对象的一个过程。

   我们需要的估计就是这两个方法的精华,只需要用到这么多就可以完成很多的事情了。下面看代码:

  
Java代码 
private static <T> T unmarshal(File templateFile, JAXBContext context) throws JAXBException { 
 
       final Unmarshaller unmarshaller = context.createUnmarshaller(); 
 
       // Unmarshal the XML in the stringWriter back into an object 
       final T chart = (T) unmarshaller.unmarshal(templateFile); 
 
       return chart; 
   } 
 
   @SuppressWarnings("unchecked") 
   private static <T> T unmarshal(String template, JAXBContext context) throws JAXBException { 
 
       final Unmarshaller unmarshaller = context.createUnmarshaller(); 
 
       // Unmarshal the XML in the stringWriter back into an object 
       final T chart = (T) unmarshaller.unmarshal(new StringReader(template)); 
 
       return chart; 
   } 
 
    

 

这里templateFile 和 template 都是xml文件对象,这样的两个overload method就可以完成由xml对象转化为java对象了。

Java代码 
private static <T> String marshal(JAXBContext context, final T chart) throws JAXBException { 
        // Create the marshaller, this is the nifty little thing that will 
        // actually transform the object into XML 
        final Marshaller marshaller = context.createMarshaller(); 
 
        // Create a stringWriter to hold the XML 
        final StringWriter stringWriter = new StringWriter(); 
 
        // Marshal the javaObject and write the XML to the stringWriter 
        marshaller.marshal(chart, stringWriter); 
 
        String chartXml = stringWriter.toString(); 
        return chartXml; 
    } 


marshal()方法也贡献上。 


方法都具备了 可以开工了。
Java代码 
  public static <T> String process(File templateFile, Class<T> type, ChartFiller<T> filler) { 
       String chartXml = null; 
 
       try { 
           JAXBContext context = JAXBContext.newInstance(type); 
 
           final T chart = (T) unmarshal(templateFile, context); 
 
           filler.fill(chart); 
 
           chartXml = marshal(context, chart); 
 
       } catch (JAXBException e) { 
           log.error(e.getMessage(), e); 
       } 
       return chartXml; 
   } 
 
   public static <T> String process(String template, Class<T> type, ChartFiller<T> filler) { 
       String chartXml = null; 
 
       try { 
           JAXBContext context = JAXBContext.newInstance(type); 
 
           final T chart = (T) unmarshal(template, context); 
 
           filler.fill(chart); 
 
           chartXml = marshal(context, chart); 
 
       } catch (JAXBException e) { 
           log.error(e.getMessage(), e); 
       } 
       return chartXml; 
   } 
 
public inte易做图ce ChartFiller<T> { 
       void fill(T chart); 
   } 


工具方法都上齐了,你就可以在你需要的地方调用了。当然,我还没讲我们的java操作对象。

下面举个例子,比如上面出现的chart 就是我们需要操纵的对象,它可能是一个xml对象,而我们需要操作的是java对象,晕了吧:
   比如我们的chart是在页面需要显示的图形,比如fusioncharts 的某个图,先定义为chart,它会是一个接口类,是所有xxxChart的父类。 比如我的具体chart名叫GaugeChart。

代码如下,别说晕说郁闷了:

Java代码 
public inte易做图ce Chart { 
 

 

Java代码 
@XmlRootElement(name = "chart") 
public class GaugeChart implements Chart { 
 
    @XmlAttribute 
    private String lowerLimit; 
 
    @XmlAttribute 
    private String upperLimit; 
 
    @XmlAttribute 
    private String lowerLimitDisplay; 
 
    @XmlAttribute 
    private String upperLimitDisplay; 
 
    @XmlAttribute 
    private String majorTMNumber; 
 
    @XmlAttribute 
    private String majorTMColor; 
 
    @XmlAttribute 
    private String majorTMHeight; 
 
    @XmlAttribute 
    private String minorTMNumber; 
 
    @XmlAttribute 
    private String minorTMColor; 
 
    @XmlAttribute 
    private String minorTMHeight; 
 
    @XmlAttribute 
    private String displayValueDistance; 
 
    @XmlAttribute 
    private String tickValueDistance; 
 
    @XmlAttribute 
    private Str

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,