java.lang.NoSuchFieldError: REFLECTION

我的错误信息如下:

Caused by: java.lang.NoSuchFieldError: REFLECTION

at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.(RuntimeModelBuilder.java:43)

at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:344)

at com.sun.xml.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:216)

at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)

at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247)

at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234)

at javax.xml.bind.ContextFinder.find(ContextFinder.java:441)

at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641)

at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)

解决方法:

首先用 mvn dependency:tree ,查看依赖包的树

java.lang.NoSuchFieldError: REFLECTION_第1张图片

找这个关键字,很明显有主版本号不一致,改成一致的高版本,jaxb2.3以下的版本需要添加如下四个jar包:


    javax.xml.bind
    jaxb-api
    2.2



    com.sun.xml.bind
    jaxb-core
    2.2



    com.sun.xml.bind
    jaxb-impl
    2.2



    javax.activation
    activation
    1.1.1

2.3版本或以上只需要添加jaxws-rt即可,该jar包包含上面4个jar:


    com.sun.xml.ws
    jaxws-rt
    2.3.0

后面发生了同样的问题,问题描述以及解决办法如下:

在控制台输入mvn dependency:tree,在打印的依赖树如下图中看到不同版本jaxb-impl在jaxws-rt中自带的:

java.lang.NoSuchFieldError: REFLECTION_第2张图片

添加相同版本的jar(在父pom中定义了2.3版本的jaxb-impl),再把jaxws-rt自带的jaxb-impl注释掉即可:

java.lang.NoSuchFieldError: REFLECTION_第3张图片

 

 

 

 

你可能感兴趣的:(java,jawb)