001 /** 002 * 003 * Copyright 2005 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.kernel.config.xstream; 018 019 import java.net.URI; 020 021 import com.thoughtworks.xstream.XStream; 022 import com.thoughtworks.xstream.converters.reflection.ReflectionProvider; 023 import com.thoughtworks.xstream.core.JVM; 024 import org.apache.geronimo.gbean.AbstractName; 025 import org.apache.geronimo.gbean.AbstractNameQuery; 026 import org.apache.geronimo.gbean.GBeanData; 027 import org.apache.geronimo.gbean.GBeanInfo; 028 import org.apache.geronimo.kernel.config.ConfigurationData; 029 import org.apache.geronimo.kernel.config.ConfigurationModuleType; 030 import org.apache.geronimo.kernel.repository.Artifact; 031 import org.apache.geronimo.kernel.repository.Dependency; 032 import org.apache.geronimo.kernel.repository.ImportType; 033 import org.apache.geronimo.kernel.repository.Version; 034 035 /** 036 * @version $Rev: 410741 $ $Date: 2006-05-31 21:35:48 -0700 (Wed, 31 May 2006) $ 037 */ 038 public final class XStreamUtil { 039 private XStreamUtil() { 040 } 041 042 public static XStream createXStream() { 043 JVM jvm = new JVM(); 044 ReflectionProvider reflectionProvider = jvm.bestReflectionProvider(); 045 XStream xstream = new XStream(reflectionProvider); 046 047 // AbstractName 048 xstream.alias("abstractName", AbstractName.class); 049 xstream.addImmutableType(AbstractName.class); 050 xstream.registerConverter(new AbstractNameConverter()); 051 052 // AbstractNameQuery 053 xstream.alias("abstractNameQuery", AbstractNameQuery.class); 054 xstream.addImmutableType(AbstractNameQuery.class); 055 xstream.registerConverter(new AbstractNameQueryConverter()); 056 057 // Artifact 058 xstream.alias("artifact", Artifact.class); 059 xstream.addImmutableType(Artifact.class); 060 061 // ConfigurationData 062 xstream.alias("configurationData", ConfigurationData.class); 063 xstream.registerConverter(new ConfigurationDataConverter(reflectionProvider, xstream.getClassMapper())); 064 065 // ConfigurationModuleTypeConverter 066 xstream.alias("moduleType", ConfigurationModuleType.class); 067 xstream.addImmutableType(ConfigurationModuleType.class); 068 xstream.registerConverter(new ConfigurationModuleTypeConverter()); 069 070 // Dependency 071 xstream.alias("dependency", Dependency.class); 072 xstream.addImmutableType(Dependency.class); 073 074 // GBeanData 075 xstream.alias("gbean", GBeanData.class); 076 xstream.registerConverter(new GBeanDataConverter(xstream.getClassMapper())); 077 078 // GBeanInfo 079 xstream.alias("gbean-info", GBeanInfo.class); 080 081 // w3c Dom 082 xstream.registerConverter(new DomConverter()); 083 084 // ImportType 085 xstream.addImmutableType(ImportType.class); 086 xstream.registerConverter(new ImportTypeConverter()); 087 088 // QName 089 try { 090 xstream.registerConverter(new QNameConverter()); 091 } catch (Exception e) { 092 // cl can't see QName class so we don't need to register a converter for it 093 } 094 095 // Version 096 xstream.alias("version", Version.class); 097 xstream.addImmutableType(Version.class); 098 xstream.registerConverter(new VersionConverter()); 099 100 // URI 101 xstream.alias("uri", URI.class); 102 xstream.addImmutableType(URI.class); 103 xstream.registerConverter(new URIConverter()); 104 105 // XStreamGBeanState 106 xstream.registerConverter(new XStreamGBeanStateConverter()); 107 108 return xstream; 109 } 110 }