【发布时间】:2019-03-11 22:35:50
【问题描述】:
我有一个使用Spring OXM Tiger 的项目。我必须升级一个使用Spring Core (4.2.8) 的专有框架,我遇到了兼容性问题。
由于框架正在将 Spring 框架从 3.0.x 升级到 4.2.8,我偶然发现了以下异常:
java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.forName(Ljava/lang/String;)Ljava/lang/Class;
at org.springframework.oxm.jaxb.JaxbUtils.<clinit>(JaxbUtils.java:44)
at org.springframework.oxm.jaxb.Jaxb2Marshaller.createJaxbContext(Jaxb2Marshaller.java:272)
at org.springframework.oxm.jaxb.AbstractJaxbMarshaller.afterPropertiesSet(AbstractJaxbMarshaller.java:125)
确实,JaxbUtils 从 Spring Core 依赖项调用 ClassUtils.forName(Ljava/lang/String;):
Class Jaxbutils from Spring Oxm 1.5.8:
static {
try {
ClassUtils.forName(JAXB_2_CLASS_NAME);
jaxbVersion = JAXB_2;
}
catch (ClassNotFoundException ex) {
// leave JAXB 1 as default
}
}
但是,Spring Core 4.2.8.RELEASE 不再提供此签名:
Class ClassUtils from Spring Core 4.2.8:
public static Class<?> forName(String name, ClassLoader classLoader) throws ClassNotFoundException, LinkageError {
目前,我需要 Spring OXM Tiger 来使用 StringSource、XPathOperations、Jaxb2Marshaller 等……但它实际上不适用于当前版本的 Spring Core。
我找不到任何解决方法来使用 Spring Core 4.2.8 和另一个版本的 Spring OXM Tiger 使用编组/解组和 XPath 操作。
我可以做些什么来解决这个问题?我有点卡住了。有没有办法不使用 Spring OXM 而仍然使用 XPath 和 Jaxb2Marshallers ?
谢谢,
【问题讨论】:
标签: java spring spring-boot dependencies