Spring OXM和Spring Core之间冲突的解决方法

时间:2018-12-07 15:23:29

标签: java spring spring-boot dependencies

我有一个正在使用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一起使用?

谢谢

1 个答案:

答案 0 :(得分:1)

可能已经晚了,但是您尝试使用org.springframework:spring-oxm而不是org.springframework.ws:spring-oxm并完全摆脱了spring-oxm-tiger吗?