package com.mtools.core.plugin.helper; import java.io.StringWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import com.mtools.core.plugin.db.KVMFilterWriter; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.HierarchicalStreamDriver; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.XppDriver; import com.thoughtworks.xstream.mapper.MapperWrapper; @SuppressWarnings("rawtypes") public class XStreamIg extends XStream { public void aliasEx(Object...oa) { for(int i=0;i<oa.length/2;++i) { alias((String)oa[i*2],(Class)oa[i*2+1]); } } public XStreamIg() { } public XStreamIg(HierarchicalStreamDriver hierarchicalStreamDriver) { super(hierarchicalStreamDriver); } protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { public boolean shouldSerializeMember(Class definedIn, String fieldName) { //System.out.println(fieldName); if (super.shouldSerializeMember(definedIn, fieldName)) { Object field = null; while (definedIn != Object.class) { try { field = definedIn.getDeclaredField(fieldName); break; } catch (NoSuchFieldException e) { definedIn = definedIn.getSuperclass(); } catch (Exception e) { break; } } if(field==null) { try { field=super.realClass(fieldName); } catch(Exception e) { } } return field != null; } return false; } }; } public static String toXml(Object o) { return xs.toXML(o); } public static Object fromXml(String xml) { return xs.fromXML(xml); } public static String toXml(Object o,HashMap<String,String> fixedkvm) { Writer writer = new StringWriter(); HierarchicalStreamWriter hsw=hsd.createWriter(writer); KVMFilterWriter fw=new KVMFilterWriter(hsw,fixedkvm); xs.marshal(o, fw); return writer.toString(); } public static String toLogX(Object o,String...masks) { HashMap<String,String> hm=new HashMap<String,String>(); for(String ms:masks) hm.put(ms, "********"); return toXml(o,hm); } public static String toLog(Object o) { return toXml(o,maskMap); } public static void addLogMask(String...masks) { for(String ms:masks) maskMap.put(ms, "********"); } public static void main(String[] args) { // TrxRecord tr=new TrxRecord(); // tr.setBusiType("xxx"); // tr.setPin("1020230232"); // String xx="<pin>aa</pin><xx>adx</xx><track2>adx</track2><track3></track3>".replaceAll("(<(pin)>[^<>]*</pin>)|(<(track2)>[^<>]*</track2>)|(<(track3)>[^<>]*</track3>)", "<$2$4$6>****</$2$4$6>"); // System.out.println(xx); // XStreamIg.addLogMask("pin"); // System.out.println(Auxs.isBasicClz(int.class)); // System.out.println(XStreamIg.toLog(tr)); } private static HashMap<String,String> sysMask() { HashMap<String,String> map=new HashMap<String,String>(); String masklist=System.getProperty("SYSMASK"); if(Auxs.empty(masklist)) return map; String[] masks=masklist.split(":"); for(String ms:masks) map.put(ms, "********"); map.put("pin", "********"); map.put("track2", "********"); map.put("track3", "********"); map.put("track3", "********"); return map; } public static XStreamIg xs =new XStreamIg(); private static HierarchicalStreamDriver hsd=new XppDriver(); private static HashMap<String,String> maskMap=sysMask(); }