<dependency> <!-- xml與java pojo 映射類庫 --> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.10</version> </dependency>
實現類:
import com.thoughtworks.xstream.XStream; /** * 使用 XStream 來轉換 xml <---> Java Pojo * * @since: v1.0 */ public class XStreamFactory { /** * 將 xml 轉成 T 類型對象 * * @param xml * @param clazz 要轉換的類型,如果為 null 則返回 null * @return */ public final static <T> T fromXML(String xml, Class<T> clazz){ if(clazz != null && !xml.equals("")){ XStream xs = new XStream(); XStream.setupDefaultSecurity(xs); xs.ignoreUnknownElements(); xs.registerConverter(new MapEntryConverter()); xs.processAnnotations(clazz); xs.allowTypes(new Class[]{clazz}); return (T)xs.fromXML(xml); } return null; } /** * 將 xml 轉成 T 類型對象。(xml的根節點名稱與類名稱不相同時使用本方法) * * @param alias xml 根節點名稱(根節點名與類名不一致時) * @param xml * @param clazz * @return */ public final static <T> T fromXML(String alias, String xml, Class<T> clazz){ if(clazz != null && !xml.equals("")){ XStream xs = new XStream(); XStream.setupDefaultSecurity(xs); xs.allowTypes(new Class[]{clazz}); xs.ignoreUnknownElements(); xs.alias(alias, clazz); xs.registerConverter(new MapEntryConverter()); xs.autodetectAnnotations(true); return (T)xs.fromXML(xml); } return null; } }
例程:
PhoneDeviceInformation info = XStreamFactory.fromXML(xml, PhoneDeviceInformation.class);//xml轉pojo
Map<String, Object> datas = XStreamFactory.fromXML("NetworkConfiguration", xml, Map.class);//xml轉map
PhoneDeviceInformation xml:
<DeviceInformation> <serviceMode>On-premise</serviceMode> <serviceDomain/> <serviceState>Idle</serviceState> <MACAddress>CC5A535E0DF0</MACAddress> <HostName>SEPCC5A535E0DF0</HostName> </DeviceInformation>
NetworkConfiguration xml:
<NetworkConfiguration> <MACAddress>CC5A535E0DF0</MACAddress> <HostName>SEPCC5A535E0DF0</HostName> <ServiceMode>On-premise</ServiceMode> </NetworkConfiguration>
PhoneDeviceInformation.java
import com.thoughtworks.xstream.annotations.XStreamAlias; /** * * <p> 請求返回一個 xml 描述文件,這個 xml 描述文件映射成 pojo 就是本類 * * @since: v1.0 */ @XStreamAlias("DeviceInformation") public class PhoneDeviceInformation { private String serviceMode; private String serviceDomain; private String serviceState; @XStreamAlias("MACAddress") private String macAddress; @XStreamAlias("HostName") private String hostName; /** * @return the serviceMode */ public String getServiceMode() { return serviceMode; } /** * @param serviceMode the serviceMode to set */ public void setServiceMode(String serviceMode) { this.serviceMode = serviceMode; } /** * @return the serviceDomain */ public String getServiceDomain() { return serviceDomain; } /** * @param serviceDomain the serviceDomain to set */ public void setServiceDomain(String serviceDomain) { this.serviceDomain = serviceDomain; } /** * @return the serviceState */ public String getServiceState() { return serviceState; } /** * @param serviceState the serviceState to set */ public void setServiceState(String serviceState) { this.serviceState = serviceState; } /** * @return the macAddress */ public String getMacAddress() { return macAddress; } /** * @param macAddress the macAddress to set */ public void setMacAddress(String macAddress) { this.macAddress = macAddress; } /** * @return the hostName */ public String getHostName() { return hostName; } /** * @param hostName the hostName to set */ public void setHostName(String hostName) { this.hostName = hostName; } }