1. 程式人生 > >JAXBContext實戰封裝Xml和解析Xml

JAXBContext實戰封裝Xml和解析Xml

package test.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class JAXBUtil {
    
    private static final Log logger = LogFactory.getLog(JAXBUtil.class);
    private static Map<String,JAXBContext> map = new ConcurrentHashMap<String,JAXBContext>();
    
    /**
     *
     * @param clazz  xml繫結的物件的類
     * @param object xml繫結的物件
     * @return 解析後字元編碼為UTF-8的xml字串
     * @throws Exception
     */
    public static <T> String toXml(Class<T> clazz,Object object) throws Exception {
        // 組裝xml
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        Marshaller marshaller = null;
        JAXBContext context = null;
        String returnString = null;
        try{
            try {
                context = map.get(clazz.toString());
                if(context==null)
                {
                    context = JAXBContext.newInstance(clazz);
                    map.put(clazz.toString(), context);
                }
                marshaller = context.createMarshaller();
                //marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
                //marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");                
                marshaller.marshal(object, os);
            } catch (Exception e) {
                logger.error("組裝訊息報文錯誤:" + e.getMessage());
                logger.error(e);
                throw e;
            }
    
            //轉換為UTF-8的字串
            if (os != null) {
                returnString = os.toString(Constant.ENCODING_UTF8);
            }
        } finally{
            marshaller = null;
            if (os != null)
            {
                os.close();
            }
            os = null;
        }
        return returnString;

    }
    
    /**
     *
     * @param clazz xml繫結的物件的類
     * @param xmlString 字元編碼為UTF-8的xml字串
     * @return 返回xml繫結的物件
     * @throws Exception
     */
    public static <T> T toObject(Class<T> clazz,String xmlString) throws Exception
    {
        ByteArrayInputStream stream = new ByteArrayInputStream(xmlString.getBytes("UTF-8");
        Unmarshaller unmarshaller = null;
        JAXBContext context = null;
        Object returnObject = null;

        try {
            context = map.get(clazz.toString());
            if(context==null)
            {
                context = JAXBContext.newInstance(clazz);
                map.put(clazz.toString(), context);
            }
            unmarshaller = context.createUnmarshaller();
            returnObject = unmarshaller.unmarshal(stream);
        } catch (Exception e) {
            logger.error("解析訊息報文錯誤:" + e.getMessage());
            logger.error(e);
            throw e;
        }
        finally{
            unmarshaller = null;
            if(stream!=null)
            {
                stream.close();
            }
            stream = null;
        }

        return (T) returnObject;
    }
   
   public static void main(String[] args) throws Exception {
        TestXml test = new TestXml();
        test.setStrId("123");

相關推薦

JAXBContext實戰封裝Xml解析Xml

package test.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Map; import java.util.concurrent.Concurrent

DOM,SAX,JDOM,DOM4J優缺點比較及生產xml解析xml

下載必要的jar包: activation.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar jaxen-1.1.1.jar jdom-1.0.jar 一、DOM 解析器讀入整個文件,然後構建一個駐留記憶體的樹結構,使用 DOM 介

java組裝xml解析xml(jdom使用)

場景:將一張表一條記錄資料組裝成標準XML,將標準XML解析放入HashMap中 1.組裝XML /** 組裝XML */ public static String formatDataToXml(Map mapdData) { StringBuffer xml = ne

Python:minidom模塊(DOM寫入解析XML

ice 美化 odin xml文件 高級 獲取 node 錯誤信息 tel 一、DOM寫XML文件 #導入minidom from xml.dom import minidom # 1.創建DOM樹對象 dom=minidom.Document() # 2.創建根節點。每

java 生成解析xml

img use public set odin 實現 etag system Coding 本文主要使用的是Jdom.jar包(包的下載百度一下)實現了生成xml文件和解析xml文件 下面是生成xml的實現 說明:stuLists集合是一個存放著Student對象的集合

post方式發送解析xml

httpclient post xml public void etcauthorize(String authCode, String clientState) { logger.info("CMCasController- etcauthorize start... "); V

PHP如何接收解析xml

$_POST是通過HTTP POST方法傳遞的變數組成的陣列。是自動全域性變數。 $GLOBALS['HTTP_RAW_POST_DATA'] :總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 資料。此變數僅在碰到未識別 MIME 型別的資料時產

寫入解析 XML 文件

待測試的 Java 物件 RootElement: import javax.xml.bind.annotation.XmlRootElement; /** * Unmarshaller的文件根元素 */ @XmlRootElement public clas

C++使用TinyXML生成解析xml檔案

TinyXML is a simple, small, C++ XML parser that can be easily integrated into other programs. 官網下載原始碼 下載後把tinystr.h、tinystr.cpp、tinyxml.h、tinyxm

struts2中struts.xmlweb.xml檔案解析及工作原理

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmln

java Document生成解析xml

Document 場景:需要知道文件所有結構           需要把文件一些元素排序          文件中的資訊被多次使用的情況 優勢:由於Document是java中自帶的解析器,相容性強 缺點:由於Document是一次性載入文件資訊,如果文件太大,不太

【電信計費系統專案實戰】基礎篇---解析XML檔案

寫在前面 這一篇介紹如何解析xml檔案,因專案中的角色管理有個許可權列表 為了方便管理,我們用privileges.xml儲存許可權操作資訊。 解析xml檔案 用privileges.xml儲存許可權操作資訊的程式碼如下: <?xml

JAVA DOM生成解析XML例項

XML現在已經成為一種通用的資料交換格式,平臺的無關性使得很多場合都需要用到XML。java操作XML時候有4中經典方法,本文將介紹DOM操作XML。並給出一個用DOM生成和解析XML的例項。 初始步驟如下: 1.建立解析工廠: DocumentBuilderFac

Java之Pull方式生成xml檔案解析xml檔案

Pull XML解析器早已經被google整合到android sdk當中,它是google官方推薦的解析器。 如果我們要在Java桌面、J2ME等當中使用Pull方式生成xml檔案和解析xml檔案,需要用到kxml2; KXML解析器是基於普通XML PULL解析器的

java 利用Xstream註解生成解析xml

1.Xstream簡介; 使用限制: JDK版本不能<1.5. 雖然預處理註解是安全的,但自動偵查註解可能發生競爭條件. 特點: 簡化的API; 無對映檔案; 高效能,低記憶體佔用; 整潔的XML; 不需要修改物件;支援內部私

jdom解析xml新增xml

使用jdom解析和新增xml package com.test.common.util; import java.io.FileOutputStream; import java.util.List; import org.jdom.Document; import

dom4j組裝xml 以及解析xml

next des pan count() entry col shu ron 一行 dom4j組裝xml 以及解析xml: 1.下載dom4j的jar包,地址:https://dom4j.github.io/ 2.java代碼: package test; import

SSM的XMLWEB.XML的配置

erl 視圖 核心 contex select 3.0 agg oct eth 顯示層(handler/controller):   request請求到springmvc的前端控制器,從處理器映射器找相應的handler(用@RequestMapping(" ")標註,

利用反射與dom4j讀取javabean生成對應XML讀取XML得到對應的javabean物件集合

首先實現生成對應的JAVAbean的XML檔案方法 /** * DMO4J寫入XML * @param obj 泛型物件 * @param entityPropertys 泛型物件的List集合 * @param Encode

Tomcat中的Web.xmlservlet.xml的學習

conf 元素 加載 位置 區別 目的 lte 全局配置 doc Web.xml文件使用總結 作用: 存儲項目相關的配置信息,保護servlet。解耦一些數據對程序的依賴 使用位置: 每個web項目中 Tomcat服務器中(在服務器目錄conf目錄中) 區別: We