JAXB實現xml與bean之間的轉換
public class JAXBUtils { public static String convertToXml(Object obj, boolean format) throws Exception { try { StringWriter sw = new StringWriter(); Marshaller marshaller = MarshallerFactory.getMarshaller(obj.getClass()); if (marshaller == null) { return StringUtils.EMPTY; } marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, format); marshaller.marshal(obj, sw); return sw.toString(); } catch (JAXBException e) { throw new RuntimeException("obj toXML failed", e); } } public static <T> T convertToJavaBean(String xml, Class<T> t) throws Exception { try { Unmarshaller unmarshaller = MarshallerFactory.getUnmarshaller(t); if (unmarshaller == null) { return null; } StringReader sr = new StringReader(xml); T ret = null; ret = (T) unmarshaller.unmarshal(sr); return ret; } catch (JAXBException e) { throw new RuntimeException("xml toObj failed", e); } } }
public class MarshallerFactory { private final static HashMap<Class, JAXBContext> JAXB_CONTEXT_MAP = Maps.newHashMap(); private MarshallerFactory() { } static { try { JAXB_CONTEXT_MAP.put(RequestBean.class, JAXBContext.newInstance(RequestBean.class)); // 想要進行的bean轉換的類,可以寫在這裡,初始化到Map中 } catch (Exception e) { // 列印日誌 } } public static Marshaller getMarshaller(Class t) throws JAXBException { Preconditions.checkNotNull(t); JAXBContext jaxbContext = JAXB_CONTEXT_MAP.get(t); if(jaxbContext == null) { return null; } return jaxbContext.createMarshaller(); } public static Unmarshaller getUnmarshaller(Class t) throws JAXBException { Preconditions.checkNotNull(t); JAXBContext jaxbContext = JAXB_CONTEXT_MAP.get(t); if(jaxbContext == null) { return null; } return jaxbContext.createUnmarshaller(); } }
主要就是三個介面,Marshaller、UnMarchaller和JAXBContext
- JAXBContext類,是應用的入口,通過該類建立序列化和反序列化物件,也即編組物件和解組物件;
- Marshaller 編組介面,將Java物件序列化為XML資料;
- Unmarshaller 解組介面,將XML資料反序列化為Java物件。
為了便於支援多個bean的轉換,可以將需要轉換的類都放進Factory的靜態Map中,需要用的時候直接拿出來就行了。
至於如何寫bean,一種方法是手寫,建議參考這篇部落格https://www.cnblogs.com/chenbenbuyi/p/8283657.html
主要是弄懂各個標籤的含義和作用。
另外一種方法是通過xsd檔案(相當於xml的格式模板),使用IDEA的JAXB工具反向生成Java bean
相關推薦
JAXB實現xml與bean之間的轉換
public class JAXBUtils { public static String convertToXml(Object obj, boolean format) throws Exception { try { St
利用JAXB實現xml和bean之間的轉換(一)
JAXB能夠使用Jackson對JAXB註解的支援實現(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,這樣一來可以更好的標誌可以轉換為JSON物件的JAVA類。 JDK中JAXB相關的重要Class和Interfac
jaxb實現xml與bean的相互轉化
jaxb使用說明 這裡邊有提到MessageFormat,可以瞭解下。下邊還有一個其他部落格粘過來的幾行程式碼,記錄一下。 這裡以《書》為例,寫一個完整的測試程式碼,xml包含了各種元素和集合。 test.xml <?xml version="1.0" enco
JAXB實現xml與物件互相轉換
不需要引入任何外部jar包,JAXB自jdk1.5就已被整合,jdk1.7已升級為JAXB2。 1.xml報文 <?xml version="1.0" encoding="UTF-8"?> <root xmlns="urn:iso:std:iso:20022:tec
jaxb實現xml 和 json 之間的轉換
jaxb2 實體類轉xml: public static String toXML(Object obj, String encode, boolean format, boolean fragm
jaxb實現XML與JavaBean的互相轉換遇到的難點(一)
1.首先交代一下背景: 入職後項目組交給我的第一個任務便是做一個酒店直連對接,流程說白了就是發xml報文去攜程的系統,攜程返回xml裡面包含了酒店相關資訊,流程聽著很簡單,但是涉及到跟攜程對接、跟公司內部系統對接,作為一箇中間層,專案進度很難自己把控,再加上酒
利用Digester實現xml和bean之間的轉換(二)
Digester框架屬於Jakarta Commons,它以規則和模式為基礎處理XML文件。與SAX和DOM之類的標準API相比,Digester不涉及太多的細節問題,非常適合於對XML文件進行簡單的處理。 比如要解析如下的xml檔案 <pers
JAVA 實現XML與JSON 相互轉換
tst throws light getc con parent urn In 工作 原文地址https://blog.csdn.net/congcong68/article/details/39029907 在工作中,經常碰到XML轉為JSON或者JSON轉為XML,在這
Java實現xml與json互相轉換
看到別人發的,感覺不錯,待驗證1.第一種方法(個人實現的)使用JSON-JAVA提供的方法,之前一直使用json-lib提供的方法轉json,後來發現了這個開源專案,覺得用起來很不錯,並且可以修改XML.java中的parse方法滿足自己的轉換需要。(1)首先去git下載所需
使用jaxb 實現物件與xml之間的轉換,並且是 soap報文與物件轉換
使用jaxb 實現物件與xml之間的轉換,並且是 soap報文與物件轉換 1.測試用例 public class TestJaxb { @Test public void testToObject(){ JaxbBinder jaxbBinder = new Jax
C#實現Stream與byte[]之間的轉換實例教程
inpu more family get this splay 登錄 line mem 本文以實例形式詳細介紹了C#實現Stream與byte[]之間的轉換的方法,分享給大家供大家參考之用。具體方法如下: 一、二進制轉換成圖片 MemoryStream ms = new
使用XStream是實現XML與Java對象的轉換(2)--別名
name have ret lis sea sil 數組 ttr auth 五、使用別名(Alias) 首先,有這樣一段Java代碼: Java代碼 import java.util.ArrayList; import java.util.List;
使用XStream是實現XML與Java對象的轉換(6)--持久化
light 自己的 map stc title 指定 reg 對象 框架 九、持久化 在第八節的示例中,當我們操作一組對象時,我們可以指定Writer、OutputStream來寫出序列化後的XML數據,我們還可以指定Reader、InputStream來讀取序列化後的XM
使用XStream是實現XML與Java對象的轉換(5)--Object Stream
控制 () oid dex 關閉 ava -o setname otf 八,Object Stream 之前的例子我們都是直接輸出Xml成為String類型或者從String中獲得並解析Xml,現在我們要處理輸入流和輸出流! 1,輸出流(ObjectOutputStrea
java常用工具類(一)—— Map 與 Bean 之間的互相轉換
import net.bytebuddy.implementation.bytecode.Throw; import org.springframework.cglib.beans.BeanMap; import java.beans.PropertyDescriptor; import java.lang
XML配置裡的Bean自動裝配與Bean之間的關係
需要在<bean>的autowire屬性裡指定自動裝配的模式 byType(根據型別自動裝配) byName(根據名稱自動裝配) constructor(通過構造器自動裝配) 名字須與屬性名一致 byName根據Bean
XML配置裏的Bean自動裝配與Bean之間的關系
depend alt -o 裏的 關聯 ren 分享 -- xml配置 需要在<bean>的autowire屬性裏指定自動裝配的模式 byType(根據類型自動裝配) byName(根據名稱自動裝配) constructor(通過構造器自動裝配) 名字
json 與 bean 之間的date轉換
擴充套件JsonValueProcessor介面獲得相應轉換的日期格式 import java.text.SimpleDateFormat; import java.util.Date; import net.sf.json.JsonConfig; imp
基於Jackson的JsonUtil實現字串與物件之間的轉換
比較好用的工具類,要匯入Jackson-mapper-asl依賴。詳細看程式碼,其中DateTimeUtil是另外的工具類。 import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.
xml與bean間相互轉換(補充)
今天x被stream對xmlnode的屬性(attribute)解析的問題一直困擾著,查詢了很久都告知我要手寫一個Converter,那豈不意味著我每解析一個xml檔案,就得寫一次Converter,那樣太腦殘了,最後搜尋到其實可以用註解解決這個問題 XStream常用註解