📄 xstream.java
字号:
alias("linked-hash-set", jvm.loadClass("java.util.LinkedHashSet")); alias("trace", jvm.loadClass("java.lang.StackTraceElement")); alias("currency", jvm.loadClass("java.util.Currency")); // since jdk 1.4 included, but previously available as separate package ... alias("auth-subject", jvm.loadClass("javax.security.auth.Subject")); } if (JVM.is15()) { alias("enum-set", jvm.loadClass("java.util.EnumSet")); alias("enum-map", jvm.loadClass("java.util.EnumMap")); } } protected void setupDefaultImplementations() { addDefaultImplementation(HashMap.class, Map.class); addDefaultImplementation(ArrayList.class, List.class); addDefaultImplementation(HashSet.class, Set.class); addDefaultImplementation(GregorianCalendar.class, Calendar.class); } protected void setupConverters() { ReflectionConverter reflectionConverter = new ReflectionConverter(classMapper, reflectionProvider); registerConverter(reflectionConverter, PRIORITY_VERY_LOW); registerConverter(new SerializableConverter(classMapper, reflectionProvider), PRIORITY_LOW); registerConverter(new ExternalizableConverter(classMapper), PRIORITY_LOW); registerConverter(new IntConverter(), PRIORITY_NORMAL); registerConverter(new FloatConverter(), PRIORITY_NORMAL); registerConverter(new DoubleConverter(), PRIORITY_NORMAL); registerConverter(new LongConverter(), PRIORITY_NORMAL); registerConverter(new ShortConverter(), PRIORITY_NORMAL); registerConverter(new CharConverter(), PRIORITY_NORMAL); registerConverter(new BooleanConverter(), PRIORITY_NORMAL); registerConverter(new ByteConverter(), PRIORITY_NORMAL); registerConverter(new StringConverter(), PRIORITY_NORMAL); registerConverter(new StringBufferConverter(), PRIORITY_NORMAL); registerConverter(new DateConverter(), PRIORITY_NORMAL); registerConverter(new BitSetConverter(), PRIORITY_NORMAL); registerConverter(new URLConverter(), PRIORITY_NORMAL); registerConverter(new BigIntegerConverter(), PRIORITY_NORMAL); registerConverter(new BigDecimalConverter(), PRIORITY_NORMAL); registerConverter(new ArrayConverter(classMapper), PRIORITY_NORMAL); registerConverter(new CharArrayConverter(), PRIORITY_NORMAL); registerConverter(new CollectionConverter(classMapper), PRIORITY_NORMAL); registerConverter(new MapConverter(classMapper), PRIORITY_NORMAL); registerConverter(new TreeMapConverter(classMapper), PRIORITY_NORMAL); registerConverter(new TreeSetConverter(classMapper), PRIORITY_NORMAL); registerConverter(new PropertiesConverter(), PRIORITY_NORMAL); registerConverter(new EncodedByteArrayConverter(), PRIORITY_NORMAL); registerConverter(new FileConverter(), PRIORITY_NORMAL); registerConverter(new SqlTimestampConverter(), PRIORITY_NORMAL); registerConverter(new SqlTimeConverter(), PRIORITY_NORMAL); registerConverter(new SqlDateConverter(), PRIORITY_NORMAL); registerConverter(new DynamicProxyConverter(classMapper, classLoaderReference), PRIORITY_NORMAL); registerConverter(new JavaClassConverter(classLoaderReference), PRIORITY_NORMAL); registerConverter(new JavaMethodConverter(), PRIORITY_NORMAL); registerConverter(new FontConverter(), PRIORITY_NORMAL); registerConverter(new ColorConverter(), PRIORITY_NORMAL); registerConverter(new LocaleConverter(), PRIORITY_NORMAL); registerConverter(new GregorianCalendarConverter(), PRIORITY_NORMAL); if (JVM.is14()) { // late bound converters - allows XStream to be compiled on earlier JDKs dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.extended.ThrowableConverter", PRIORITY_NORMAL, new Class[] {Converter.class} , new Object[] { reflectionConverter} ); dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.extended.StackTraceElementConverter", PRIORITY_NORMAL, null, null); dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.extended.CurrencyConverter", PRIORITY_NORMAL, null, null); dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.extended.RegexPatternConverter", PRIORITY_NORMAL, new Class[] {Converter.class} , new Object[] { reflectionConverter} ); dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.extended.SubjectConverter", PRIORITY_NORMAL, new Class[] {Mapper.class}, new Object[] {classMapper}); } if (JVM.is15()) { // late bound converters - allows XStream to be compiled on earlier JDKs dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.enums.EnumConverter", PRIORITY_NORMAL, null, null); dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.enums.EnumSetConverter", PRIORITY_NORMAL, new Class[] {Mapper.class}, new Object[] {classMapper}); dynamicallyRegisterConverter( "com.thoughtworks.xstream.converters.enums.EnumMapConverter", PRIORITY_NORMAL, new Class[] {Mapper.class}, new Object[] {classMapper}); } } private void dynamicallyRegisterConverter(String className, int priority, Class[] constructorParamTypes, Object[] constructorParamValues) { try { Class type = Class.forName(className, false, classLoaderReference.getReference()); Constructor constructor = type.getConstructor(constructorParamTypes); Converter converter = (Converter) constructor.newInstance(constructorParamValues); registerConverter(converter, priority); } catch (Exception e) { throw new InitializationException("Could not instatiate converter : " + className, e); } } protected void setupImmutableTypes() { // primitives are always immutable addImmutableType(boolean.class); addImmutableType(Boolean.class); addImmutableType(byte.class); addImmutableType(Byte.class); addImmutableType(char.class); addImmutableType(Character.class); addImmutableType(double.class); addImmutableType(Double.class); addImmutableType(float.class); addImmutableType(Float.class); addImmutableType(int.class); addImmutableType(Integer.class); addImmutableType(long.class); addImmutableType(Long.class); addImmutableType(short.class); addImmutableType(Short.class); // additional types addImmutableType(ClassMapper.Null.class); addImmutableType(BigDecimal.class); addImmutableType(BigInteger.class); addImmutableType(String.class); addImmutableType(URL.class); addImmutableType(File.class); addImmutableType(Class.class); } public void setMarshallingStrategy(MarshallingStrategy marshallingStrategy) { this.marshallingStrategy = marshallingStrategy; } /** * Serialize an object to a pretty-printed XML String. */ public String toXML(Object obj) { Writer stringWriter = new StringWriter(); HierarchicalStreamWriter writer = hierarchicalStreamDriver.createWriter(stringWriter); marshal(obj, writer); writer.flush(); writer.close(); return stringWriter.toString(); } /** * Serialize an object to the given Writer as pretty-printed XML. */ public void toXML(Object obj, Writer out) { HierarchicalStreamWriter writer = hierarchicalStreamDriver.createWriter(out); marshal(obj, writer); writer.flush(); } /** * Serialize an object to the given OutputStream as pretty-printed XML. */ public void toXML(Object obj, OutputStream out) { HierarchicalStreamWriter writer = hierarchicalStreamDriver.createWriter(out); marshal(obj, writer); writer.flush(); } /** * Serialize and object to a hierarchical data structure (such as XML). */ public void marshal(Object obj, HierarchicalStreamWriter writer) { marshal(obj, writer, null); } /** * Serialize and object to a hierarchical data structure (such as XML). * * @param dataHolder Extra data you can use to pass to your converters. Use this as you want. If not present, XStream * shall create one lazily as needed. */ public void marshal(Object obj, HierarchicalStreamWriter writer, DataHolder dataHolder) { marshallingStrategy.marshal(writer, obj, converterLookup, classMapper, dataHolder); } /** * Deserialize an object from an XML String. */ public Object fromXML(String xml) { return fromXML(new StringReader(xml)); } /** * Deserialize an object from an XML Reader. */ public Object fromXML(Reader xml) { return unmarshal(hierarchicalStreamDriver.createReader(xml), null); } /** * Deserialize an object from an XML InputStream. */ public Object fromXML(InputStream input) { return unmarshal(hierarchicalStreamDriver.createReader(input), null); } /** * Deserialize an object from an XML String, * populating the fields of the given root object instead of instantiating * a new one. */ public Object fromXML(String xml, Object root) { return fromXML(new StringReader(xml), root); } /** * Deserialize an object from an XML Reader, * populating the fields of the given root object instead of instantiating * a new one. */ public Object fromXML(Reader xml, Object root) { return unmarshal(hierarchicalStreamDriver.createReader(xml), root); } /** * Deserialize an object from an XML InputStream, * populating the fields of the given root object instead of instantiating * a new one. */ public Object fromXML(InputStream xml, Object root) { return unmarshal(hierarchicalStreamDriver.createReader(xml), root); } /** * Deserialize an object from a hierarchical data structure (such as XML). */ public Object unmarshal(HierarchicalStreamReader reader) { return unmarshal(reader, null, null); } /** * Deserialize an object from a hierarchical data structure (such as XML), * populating the fields of the given root object instead of instantiating * a new one. */ public Object unmarshal(HierarchicalStreamReader reader, Object root) { return unmarshal(reader, root, null); } /** * Deserialize an object from a hierarchical data structure (such as XML). * * @param root If present, the passed in object will have its fields populated, as opposed to XStream creating a * new instance. * @param dataHolder Extra data you can use to pass to your converters. Use this as you want. If not present, XStream * shall create one lazily as needed. */ public Object unmarshal(HierarchicalStreamReader reader, Object root, DataHolder dataHolder) { return marshallingStrategy.unmarshal(root, reader, dataHolder, converterLookup, classMapper); } /** * Alias a Class to a shorter name to be used in XML elements. * * @param name Short name * @param type Type to be aliased */ public void alias(String name, Class type) { classAliasingMapper.addClassAlias(name, type); } /** * Alias a Class to a shorter name to be used in XML elements. * * @param name Short name * @param type Type to be aliased * @param defaultImplementation Default implementation of type to use if no other specified. */ public void alias(String name, Class type, Class defaultImplementation) { alias(name, type); addDefaultImplementation(defaultImplementation, type); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -