`

castor 应用中遇到的问题

 
阅读更多

以下所有基本上都是从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使用时根节点问题

    6. **错误处理和调试**:在遇到问题时,查看Castor的日志信息可以帮助诊断错误。可能的原因包括映射文件配置错误、XML格式不正确或者Java类设计不匹配XML结构等。 举例来说,如果你的XML文档看起来像这样: ```xml...

    castor 问题 无法解组

    Castor 是一个开源Java库,主要用于XML到Java对象的映射和反映射,它使得在Java应用程序中处理XML数据变得更加便捷。当你遇到“castor无法解组”的问题时,可能涉及以下几个方面: 1. **配置问题**:Castor 需要...

    castor1.4 xsd生成java

    在XML Schema(XSD)广泛应用于定义XML数据结构的今天,Castor提供了一个方便的方法,将XSD文件自动转化为Java类,使得开发者能够更轻松地处理XML数据。以下是关于"Castor 1.4 xsd生成java"的相关知识点: 1. **...

    castor资源收集 api 教程 源码

    4. 实战项目:将Castor应用到实际项目中,解决数据绑定和数据库操作的问题。 总之,掌握Castor API及其源码可以帮助开发者提升工作效率,更好地处理数据和XML交互。通过深入学习和实践,我们可以更好地利用这个工具...

    castor-1.2.zip

    开发者可能需要查阅相关的社区资源来解决使用过程中遇到的问题。 总之,"castor-1.2.zip" 提供了Castor 1.2版本的全部内容,它是一个强大的工具,可以帮助Java开发者更高效地处理XML数据和数据库操作。通过深入学习...

    Castor入门实例,含完整jar包

    4. 遇到问题时,检查日志和异常信息,根据Castor的文档进行调试。 总之,Castor是一个强大且灵活的工具,适用于需要XML数据交换和ORM的Java应用。通过这个入门实例,你可以深入了解它的用法,并将其应用于实际项目...

    Castor使用例子

    7. **异常处理**:在操作过程中,可能会遇到如数据不匹配、格式错误等问题,例子可能展示了如何捕获并处理这些异常。 8. **自定义转换**:有时,标准的Castor映射可能无法满足特定需求,你可能需要创建自定义的转换...

    castor-0.9.9.1.jar

    另外,不同版本的Castor可能存在兼容性问题,因此在升级或降级版本时需要谨慎测试。 总之,Castor是一个功能丰富的数据绑定框架,适用于那些需要频繁进行Java对象与XML转换的项目。通过合理使用,可以极大地提高...

    castor 框架jar包和src

    - **学习与调试**:拥有源代码意味着开发者可以直接查看和理解内部实现,有助于学习Castor的工作原理,也可以在遇到问题时进行调试。 - **自定义扩展**:如果需要对Castor进行定制或添加特定功能,源代码提供了...

    《用Castor 处理XML文档》学习笔记

    此外,由于 Castor 的维护不如其他一些库活跃,可能会遇到一些现代Java和XML规范的兼容性问题。 总结来说,Castor是一个实用的工具,尤其适合那些需要快速开发并处理XML的项目。通过理解其核心原理和熟练掌握其API...

    xml的一个解析工具castor

    5. **处理异常**:在转换过程中可能会遇到错误,例如XML格式错误或映射问题,需要捕获并处理这些异常。 总的来说,Castor作为一个全面的XML处理工具,不仅简化了XML数据的解析和序列化过程,还提供了强大的ORM功能...

    XML数据绑定【castor】

    在实际应用中,使用Castor通常涉及以下步骤: 1. **安装与引入**:将Castor的JAR文件添加到项目的类路径中,或者如果是Maven项目,可以在pom.xml中添加依赖。 2. **创建映射文件**:定义XML结构与Java类的对应关系...

    XML_与_Java_技术_用_Castor_进行数据绑定

    10. **异常处理**:在使用Castor进行数据绑定时,可能会遇到各种异常,如解析错误、类型不匹配等。理解和处理这些异常是成功集成Castor的关键。 总的来说,Castor为Java开发者提供了一种强大且灵活的工具,使得XML...

    castor-matlab:Matlab类连接到Castor API-matlab开发

    在实际应用中,用户需要遵循以下步骤来使用Castor-Matlab: 1. **安装和导入**:首先,你需要从`github_repo.zip`解压缩并安装这个MATLAB类库。然后在MATLAB中导入相关的类。 2. **配置连接**:设置你的`clientID`...

    Castor Web Builder-开源

    8. **文档与社区支持**:作为一个开源项目,Castor拥有活跃的社区,开发者可以在社区中找到丰富的文档、教程和示例,遇到问题时也能得到其他开发者的帮助。 9. **持续更新与维护**:开源软件的一大优势就是持续的...

    Characterization and Cytocompatibility of Nano-hydroxyapatite/glyceride of Castor Oil Based Polyurehane Scaffolds

    这表明n-HA/PU复合多孔支架在骨组织工程领域中具有潜在的应用价值,能够应用于骨修复和重建。 六、骨组织工程的相关概念 该研究强调了骨组织工程的主旨,即临床应用治疗骨缺损或坏死。骨修复的关键在于构建包含种子...

    Crea Castor JDO Mapping-开源

    在Java应用程序中,JDO允许开发者以面向对象的方式操作数据,而无需直接编写SQL语句。通过使用Castor JDO Mapping,开发者可以将数据库中的记录映射到Java类实例,从而简化数据访问和管理。 标题“Crea Castor JDO ...

    maven1.0.2

    随着Maven的不断发展,这些问题在后续版本中得到了改善,如Maven 2和3引入了更强大的依赖管理和更灵活的配置选项。然而,了解早期版本有助于我们理解Maven是如何逐步演进成为现代Java项目构建不可或缺的一部分的。

    java持久化的解决方案

    为了解决这一问题,开发人员通常会采用更灵活的O/X mapping工具,如JAXB(Java Architecture for XML Binding)和Castor等。 #### JAXB与Castor:定制化的O/X Mapping方案 JAXB和Castor是两个流行的O/X mapping...

Global site tag (gtag.js) - Google Analytics