我正在从jaxb2-basics-runtime-0.64.0升级到jaxb2-basics-runtime-1.11.1。

当我生成的对象尝试使用生成的toString方法时...

public String toString() {
    final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
    final StringBuilder buffer = new StringBuilder();
    append(null, buffer, strategy);
    return buffer.toString();
}


它抛出一个NoSuchFieldError

Caused by: java.lang.NoSuchFieldError: INSTANCE
    at com.bean.RequestIDCommonData.toString(RequestIDCommonData.java:147)


我知道在类路径上我只有jaxb2-basics-runtime-1.11.1.jar。

我知道当我检查从哪里加载JAXBToStringStrategy时,它显示jaxb2-basics-runtime-1.11.1.jar

Class klass = JAXBToStringStrategy.class;
java.net.URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");
System.out.print(location);


我知道我正在使用JDK 1.7进行编译,并且已经测试过Tomcat正在使用JDK 7运行。

 Double.parseDouble(System.getProperty("java.specification.version"));
 1.7


我知道,如果我从Eclipse远程调试到Tomcat并执行以下命令,它将为我提供一个Object实例。

ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;


我对接下来要看的东西感到困惑。

完整的类路径如下...

aopalliance-1.0.jar
aspectjrt-1.8.10.jar
aspectjweaver-1.8.10.jar
commons-beanutils-1.9.3.jar
commons-collections-3.2.2.jar
commons-io-2.5.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
cxf-core-3.1.11.jar
cxf-rt-frontend-jaxrs-3.1.11.jar
cxf-rt-transports-http-3.1.11.jar
ehcache-2.10.3.jar
gson-2.8.0.jar
guava-20.0.jar
jackson-core-asl-1.9.13.jar
jackson-jaxrs-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
javax.annotation-api-1.2.jar
javax.inject-1.jar
javax.ws.rs-api-2.0.1.jar
jaxb2-basics-runtime-1.11.1.jar
jcl-over-slf4j-1.7.25.jar
jevv.txt
joda-time-2.9.9.jar
log4j-1.2.17.jar
mybatis-3.4.4.jar
mybatis-spring-1.3.1.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar
spring-aop-4.3.7.RELEASE.jar
spring-beans-4.3.7.RELEASE.jar
spring-context-4.3.7.RELEASE.jar
spring-context-support-4.3.7.RELEASE.jar
spring-core-4.3.7.RELEASE.jar
spring-expression-4.3.7.RELEASE.jar
spring-integration-core-4.3.8.RELEASE.jar
spring-integration-jms-4.3.8.RELEASE.jar
spring-jdbc-4.3.7.RELEASE.jar
spring-jms-4.3.7.RELEASE.jar
spring-messaging-4.3.7.RELEASE.jar
spring-orm-4.3.7.RELEASE.jar
spring-retry-1.1.3.RELEASE.jar
spring-security-config-4.2.2.RELEASE.jar
spring-security-core-4.2.2.RELEASE.jar
spring-security-web-4.2.2.RELEASE.jar
spring-tx-4.3.7.RELEASE.jar
spring-web-4.3.7.RELEASE.jar
stax2-api-3.1.4.jar
woodstox-core-asl-4.4.1.jar


我应该声明,在出现错误的那一点是通过CXF周围的AspectJ点。这让我觉得这可能是类加载器的问题,但是在类路径上只有名称为JAXBToStringStrategy的类。

最佳答案

此问题的根源在于JAXBToStringStategy已将其定义从接口更改为具体类。
java - jaxb2-basics-runtime NoSuchFieldError:从0.6.4升级到1.11.1时的实例-LMLPHP

将生成类的Maven插件升级到0.8.3至0.13.2
解决了问题。

        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.13.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <extension>true</extension>
                <generatePackage>${jaxbbeanpackagename}</generatePackage>
                <args>
                    <arg>-XtoString</arg>
                    <arg>-Xequals</arg>
                    <arg>-XhashCode</arg>
                    <arg>-Xinheritance</arg>
                    <arg>-Xcopyable</arg>
                    <arg>-XenumValue</arg>
                    <arg>-Xannotate</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>0.6.4</version>
                    </plugin>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                        <version>0.6.0</version>
                    </plugin>
                </plugins>
            </configuration>
        </plugin>

关于java - jaxb2-basics-runtime NoSuchFieldError:从0.6.4升级到1.11.1时的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44674436/

10-13 03:40