- Spring ORM 的 SqlMapClientFactoryBean 无法找到 iBatis 配置文件的问题:这个错误发生在 SqlMapClientFactoryBean 的 buildSqlMapClient 方法中,原因是 Spring 的 Resource 类使用 Classloader 的 getInputStream 方法寻找资源,但是在 ServiceMix 中,此时的 classloader 是 OSGi 相关的,结果是以 ServiceMix 的跟目录寻找文件,但是真正的配置文件缺失放在 bundle jar 文件中。解决方法是在加载配置文件的代码前后加上如下的代码:
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
// Load and parse iBatis configuration files.
Thread.currentThread().setContextClassLoader(loader);
-
由 Classloader 导致的 JAXB 错误
如果在 SerivceMix 中使用 JAXB 解析 XML,你可能会遇见下面的异常:
Caused by: javax.xml.bind.JAXBException: Unable to create context
- with linked exception:
[java.lang.NoSuchMethodException: com.sun.xml.bind.v2.ContextFactory.createContext(java.lang.String, java.lang.ClassLoader)]
at javax.xml.bind.ContextFinder.find(ContextFinder.java:72)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:77)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:73)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:69)
at com.alcatel_lucent.aes.scf.configurator.interceptor.TdrInterceptor.<init>(TdrInterceptor.java:77)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
... 67 more
Caused by: java.lang.NoSuchMethodException: com.sun.xml.bind.v2.ContextFactory.createContext(java.lang.String, java.lang.ClassLoader)
at java.lang.Class.getMethod(Class.java:1605)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:69)
... 76 more
这是由于 jaxb-impl.jar 并不是个 OSGi aware 的 jar 包,所以在 OSGi 环境中,如果 classloader 不合适的话,很容易产生一些奇怪的问题。具体到这个问题,如果不加特殊的处理,Bundle 所使用的 classloader 是 org.springframework.osgi.util.BundleDelegatingClassLoader。使用这个 classloader 和 JAXB 时,就有可能会出现上面异常。解决方法是使用以下代码使用 JAXB:
ClassLoader cl = com.alcatel_lucent.aes.scf.configurator.
ObjectFactory.class.getClassLoader();
JAXBContext jaxbContext = JAXBContext.
newInstance("com.alcatel_lucent.aes.scf.configurator", cl);
此时的 classloader 是 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader,能够正确加载 JAXB 的 jar 包。
- 在 ServiceMix 中使用 CXF 时,如果遇到类加载的奇怪问题,也是由于 classloader issue。解决方法是
ClassLoader ocl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().
getClassLoader());
reallyDoSomething(arg);
} finally {
Thread.currentThread().setContextClassLoader(ocl);
}
相关推荐
6年工作经验总结-给毕业生的一点建议
实施开发工作经验总结 在这篇文章中,我们将探讨实施开发工作的经验总结。实施开发工作是一个复杂的过程,它涉及到多个阶段和多个角色。今天,我们主要讲的是实施工程师的工作经验总结。 首先,实施工程师是一个...
根据给定文件的信息,我们可以提炼出以下相关的IT知识点与非IT相关的工作经验总结: ### 非IT相关的工作经验总结 1. **个人工作总结的重要性**: - 个人工作总结不仅有助于个人回顾过去的工作表现,还能帮助员工...
5. **经验总结**:这是整个总结的关键部分,团队需要从问题中提炼出经验和教训,这可能包括改进工作流程、提高沟通效率、调整风险管理策略等方面。经验总结不仅限于负面的经验,也可以是成功的实践,旨在为团队提供...
个人工作经验总结.doc
教学工作经验总结.docx
育人工作经验总结.doc
幼儿园工作经验总结.doc
中学团委工作经验总结交流_1.docx
班主任工作经验总结.doc
教育教学工作经验总结.docx
言传身教以人为本——班主任工作经验总结班主任工作总结.doc
这份压缩包文件"Java学习笔记&工作经验总结.rar"包含了多个PDF文档,分别涵盖了Java的基础知识、高级特性、数据结构以及学员的学习总结,是深入理解Java编程的宝贵资料。 1. **Java SE基础全程学习笔记.pdf**: 这...
工作经验工作经验工作经验工作经验工作经验工作经验
政治教学工作经验总结2021.pdf
学生会主席工作经验总结.docx
中学团委工作经验总结交流.docx
初中班主任工作经验总结.doc
【教师工作经验总结】 这篇工作总结主要涵盖了大学教师和小学数学教师的工作体验和反思,涉及了教学方法、教学质量提升、个人素质发展、以及课堂教学管理等多个方面。 首先,教师在教学过程中重视教学质量的提高,...
整理税务年工作经验总结.doc