<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    eagle

    學(xué)無(wú)止境,細(xì)節(jié)決定成敗.
    posts - 12, comments - 11, trackbacks - 0, articles - 2
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Jaxb筆記

    Posted on 2012-01-30 14:02 月下孤城 閱讀(3531) 評(píng)論(0)  編輯  收藏

    最近項(xiàng)目原因,研究了下jaxbjaxbJava api xml binding的簡(jiǎn)稱,是為實(shí)現(xiàn)javaxml數(shù)據(jù)的相互轉(zhuǎn)換而定義的一個(gè)api標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)以annotation的方式實(shí)現(xiàn)xml的轉(zhuǎn)換。不用開發(fā)人員單獨(dú)解析每個(gè)對(duì)象屬性與xml元素的mapping關(guān)系,只需在java bean中注入簡(jiǎn)單的java annotation,其他的交給工具去處理。該工具包類能給xml數(shù)據(jù)處理帶來(lái)極大方便。具體實(shí)現(xiàn)見下。

    Java bean對(duì)象定義:

    /**
     * 促銷xml對(duì)象類 
     * 
    @author daiqiang
     * 對(duì)應(yīng)xml文件內(nèi)容如下:
     * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <promotion>
            <id>promotionId</id>
            <name>元旦促銷</name>
            <type>CMS</type>
            <typeDes>CMS主推促銷</typeDes>
            <startTime>2012-01-01</startTime>
            <endTime>2012-01-03</endTime>
            <products>
                <product>
                    <merchantId>merchantid</merchantId>
                    <num>500</num>
                    <productCode>code1</productCode>
                    <productId>111</productId>
                    <requestId>codedata</requestId>
                </product>
                <product>
                    <merchantId>merchantid2</merchantId>
                    <num>800</num>
                    <productCode>code2</productCode>
                    <productId>2</productId>
                    <requestId>codedata</requestId>
                </product>
            </products>
        </promotion>
     *
     
    */

    @XmlRootElement(name
    ="promotion")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Promotion implements Serializable{

        
    private static final long serialVersionUID = 870036805093867083L;
        
        
    private String id;
        
    private String name;
        
    private String type;
        
    private String typeDes;
        
    private String startTime;
        
    private String endTime;
        
        @XmlElementWrapper(name
    ="products")
        @XmlElement(name
    ="product")
        
    private List<Product> products;
        
        
    /*@XmlTransient
        the field is not binded to xml
        private String testHiddenFields;
    */

        
    //此處省略具體set get 方法。

    說(shuō)明:上文定義了一個(gè)促銷對(duì)象類Promotion.

    類標(biāo)注表示:

    @XmlRootElement:用于定義該對(duì)象映射成xml根節(jié)點(diǎn)元素名,默認(rèn)與類名一致。可通過@XmlRootElement(name="otherRootElement")方式指定具體名稱。

     

    @XmlAccessorType: 用于標(biāo)識(shí)該java對(duì)象與xml映射的訪問方式。有如下屬性值。

    PROPERTY/FIELD/PUBLIC_MEMBER/NONE

     

    PROPERTY: 所有set/get方法對(duì)將被映射為xml元素.除非被XmlTransient標(biāo)注例外.

     

    FIELD:所有對(duì)象屬性將被映射為xml元素。除非被XmlTransient標(biāo)注例外.

     

    PUBLIC_MEMBER每個(gè)publicget/set對(duì)方法或public field將被映射為xml元素。除非被XmlTransient標(biāo)注例外.

     

    NONE沒有fields property被映射,除非顯示指定具體fieldsproperty

     

     

    屬性標(biāo)注表示:

    @XmlTransient:指對(duì)應(yīng)屬性不做xml映射。

    @XmlElement(name="product"):指定屬性映射時(shí)對(duì)應(yīng)xml元素名稱

    @XmlElementWrapper(name="products"):在某些場(chǎng)景下,需要對(duì)映射的屬性做包裝處理。如例子中products List對(duì)象屬性,在xml中我想在映射對(duì)所有的product元素再做一個(gè)products 元素包裝,如下所示,就可以按此種方式實(shí)現(xiàn)。

    <products>

        <product> … </product>

        <product> … </product>

        …

    </products>

     

    Javaxml映射方法

     

    Java對(duì)象到XML

     

    /**
         * convent java object to xml format String.
         * 
         * 
    @param originalObj
         * 
    @param xmlCharset
         *            the format of charset for xml. ie "UTF-8", "GBK"
         * 
    @param isFragment
         *            whether or not display the header for the generated xml. such
         *            as <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
         * 
    @return
         
    */

        
    public static String convertJava2XmlStr(Object originalObj,
                String xmlCharset, 
    boolean isFragment) {
            String xmlStr 
    = "";
            
    try {
                JAXBContext ctx 
    = JAXBContext.newInstance(originalObj.getClass());
                Marshaller marshaller 
    = ctx.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_ENCODING, xmlCharset);
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, 
    true);
                marshaller.setProperty(Marshaller.JAXB_FRAGMENT, isFragment);

                ByteArrayOutputStream os 
    = new ByteArrayOutputStream();
                marshaller.marshal(originalObj, os);

                xmlStr 
    = os.toString();
            }
     catch (PropertyException e) {
                e.printStackTrace();
            }
     catch (JAXBException e) {
                e.printStackTrace();
            }
     catch (Exception e) {
                e.printStackTrace();
            }

            
    return xmlStr;
        }

     

    XMLJava對(duì)象

     

    /**
         * convert xml string to Java object by JAXB.
         * 
    @param obj  to convert java object.
         * 
    @param xmlStr    
         * 
    @return
         
    */

        
    public static Object convertXmlStr2Java(Object obj, String xmlStr) {
            
    try {
                JAXBContext ctx 
    = JAXBContext.newInstance(obj.getClass());
                InputStream source 
    = new ByteArrayInputStream(xmlStr.getBytes());
                Unmarshaller unmarshaller 
    = ctx.createUnmarshaller();
                obj 
    = unmarshaller.unmarshal(source);
            }
     catch (JAXBException e) {
                e.printStackTrace();
            }

            
    return obj;
        }






    ---------------------
    月下孤城
    mail:eagle_daiqiang@sina.com

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久久久久亚洲Av无码精品专口| 免费精品国偷自产在线在线| 成人特级毛片69免费观看| 亚洲国产日韩a在线播放| 亚洲日产乱码一二三区别| 亚洲综合精品伊人久久| 国产AV旡码专区亚洲AV苍井空 | 美女被免费喷白浆视频| 亚洲国产精品免费观看| 无码中文字幕av免费放| 四虎成人免费观看在线网址 | 97在线观看永久免费视频| 黄色片在线免费观看| 好先生在线观看免费播放| 国产精品视频免费一区二区| 狠狠久久永久免费观看| avtt亚洲天堂| 亚洲中文字幕无码一久久区| 亚洲AV无码精品无码麻豆| 久久亚洲精品中文字幕| 亚洲国产日韩女人aaaaaa毛片在线 | 久久国产乱子伦免费精品| 免费观看激色视频网站bd| 动漫黄网站免费永久在线观看| 成人午夜18免费看| 免费一区二区三区四区五区| 亚洲综合久久夜AV | 久久久久久亚洲精品中文字幕| 亚洲精品白色在线发布| 亚洲一区二区三区高清在线观看| 久久精品亚洲日本波多野结衣 | 亚洲综合在线成人一区| 亚洲人成777在线播放| 亚洲爆乳AAA无码专区| 国产精品偷伦视频免费观看了| 久久大香伊焦在人线免费| 丁香花免费高清视频完整版| 免费人成无码大片在线观看| 亚洲成av人影院| 亚洲首页国产精品丝袜| 狠狠热精品免费观看|