以下所有基本上都是从castor文档上copy过来的,只是在这次项目应用中遇到了这些问题,记录下。
castor虽然用起来很简单,可是用的好却不简单。这里只是提一些使用中的遇到的问题:
1.缩进问题和命名规范。
org.exolab.castor.indent=true
org.exolab.castor.xml.naming=mixed
加上上面的第一个属性就能使产生的xml有缩进,格式比较好看(调试的时候可以用用,正式环境还是去掉比较好)
第二属性设置后,生成的xml的元素名称就可以达到基本符合java的命名规范。
还可以使用<class name="com.acme.Foo" auto-complete="true"/> auto-complete来化繁为简(不用写具体的绑定配置拉)
2.性能问题
castor每次在loadingMapping的时候都会生成ClassDescriptorResolver(大概就是用来将xml的类配置信息映射到对象),如果用castor的quick start里的那种方式可能会有性能问题(其实差的不是很多,经过过我测试,序列化500个对象采用这种方式和后面将要用的新方式只是查了3倍左右。平均时间:10ms<->3ms),以下是缓存ClassDescriptorResolver的解决方案:
publicclassMappingUtils...{
privatestaticLoglog=LogFactory.getLog(MappingUtils.class);
publicstatic<T>Tdeserialize(Readerreader,Class<T>clazz)...{
URLmappingFile=clazz.getResource(clazz.getSimpleName()
+"-mapping.xml");
try...{
ClassDescriptorResolverresolver=getCachedResolver(mappingFile);
Unmarshallerunmarshaller=newUnmarshaller();
unmarshaller.setResolver((XMLClassDescriptorResolver)resolver);
returnclazz.cast(unmarshaller.unmarshal(reader));
}catch(Exceptione)...{
log.error("",e);
returnnull;
}
}
publicstaticvoidserialize(Writerwriter,Objectobj)...{
Classclazz=obj.getClass();
serialize(writer,obj,clazz.getResource(clazz.getSimpleName()
+"-mapping.xml"));
}
publicstaticvoidserialize(Writerwriter,Objectobj,URLmappingFile)...{
Marshallermarshaller=newMarshaller();
try...{
ClassDescriptorResolverresolver=getCachedResolver(mappingFile);
marshaller.setResolver((XMLClassDescriptorResolver)resolver);
marshaller.setWriter(writer);
marshaller.marshal(obj);
}catch(Exceptione)...{
log.error("",e);
}
}
privatestaticMap<Object,ClassDescriptorResolver>resolverCache=newHashMap<Object,ClassDescriptorResolver>();
privatestaticClassDescriptorResolvergetCachedResolver(URLmappingFile)
throwsException...{
ClassDescriptorResolverresolver=resolverCache.get(mappingFile
.getFile());
if(resolver==null)...{
Mappingmapping=newMapping();
mapping.loadMapping(mappingFile);
resolver=ClassDescriptorResolverFactory
.createClassDescriptorResolver(BindingType.XML);
MappingUnmarshallermappingUnmarshaller=newMappingUnmarshaller();
MappingLoadermappingLoader=mappingUnmarshaller.getMappingLoader(
mapping,BindingType.XML);
resolver.setMappingLoader(mappingLoader);
resolverCache.put(mappingFile.getFile(),resolver);
}
returnresolver;
}
}
3. 直接序列化List对象
castor支持序列化一个list到xml!其实我也是试出来的,本来以为所有序列化对象都要是xml中的带有map-to顶层元素类。
你只需要定义list中对象的类映射到mapping文件就可以直接序列化一整个list了,大概像下面的这段代码
publicvoidserializeList(Writerwriter,Listobj,URLmappingFile)...{
XMLContextcontext=newXMLContext();
Mappingmapping=XMLContext.createMapping();
try...{
mapping.loadMapping(mappingFile);
context.addMapping(mapping);
Marshallermarshaller=context.createMarshaller();
marshaller.setSuppressXSIType(true);//去掉xsi:type
marshaller.setRootElement("root");//给顶层元素改个名字
marshaller.setWriter(writer);
marshaller.marshal(obj);
}catch(Exceptione)...{
log.error("",e);
}
}
分享到:
相关推荐
castor castor资料 castor castor castor
使用Castor时,如果没有根节点时,会报出异常,这个例子就是为了解决这个问题
eclipse中castor插件的集成,方便数据绑定的实现
该资源展示了Castor的XML编组框架功能,作为文章《Castor功能与应用参考(二)》的示例代码
没法解组,应用castor技术,test包是测试包,里面只有model和map映射,很简单的小测试工程
castor 帮助文档 Castor API Documentation
org.castor.util.IdentityMap org.castor.util.IdentitySet org.exolab.javasource.JEnum org.exolab.javasource.JType org.exolab.castor.util.List org.exolab.javasource.Header org.exolab.javasource.JClass ...
castor1.4 xsd生成java
castor学习教程 castor学习教程castor学习教程 castor学习教程 castor学习教程
castor解析xml
castor简介 castor是一种将java对象和XML自动绑定的开源软件。它可以在java对象、XML文本、SQL数据表以及LDAP目录之间绑定。Castor几乎是JAXB的替代品。Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现...
Castor 项目采用 BSD 类型的证书,因此可在任何类型的应用程序(包括完整版权的项目)中使用。 Castor 实际上仅仅有 XML 数据绑定,它还支持 SQL 和 LDAP 绑定
完整jar 直接导入使用 Castor 是一种将Java对象和XML自动绑定的开源软件。它可以在Java对象、XML文本、SQL数据表以及LDAP目录之间绑定。
castor-1.2.jar castor-1.2-anttasks.jar castor-1.2-codegen.jar castor-1.2-ddlgen.jar castor-1.2-jdo.jar castor-1.2-xml-schema.jar castor-1.2-xml.jar
Castor 项目采用 BSD 类型的证书,因此可在任何类型的应用程序(包括完整版权的项目)中使用。 Castor 实际上仅仅有 XML 数据绑定,它还支持 SQL 和 LDAP 绑定
castor-1.2.zip
用于javabean到xml映射文件的转化,可用于castor框架。 JDK6编译、运行。 双击运行时,需要等待一段时间。
castor解析xml与xsd校验xml
Castor.jar包,解析xml工具包.
castor api 教程 源码 需要的看看吧!!!!