【问题标题】:Workaround for conflict between Spring OXM and Spring CoreSpring OXM 和 Spring Core 冲突的解决方法
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 确实有点晚了,我用了你的库。猜猜这是正确的答案!
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多