jaxb2-basics-runtime NoSuchFieldError: INSTANCE when upgrading from 0.6.4 to 1.11.1
jaxb2-basics-runtime NoSuchFieldError: INSTANCE when upgrading from 0.6.4 to 1.11.1
我正在从 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)
我知道在 class 路径上我只有 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 并执行以下命令,它会给我一个对象实例。
ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
我不知道接下来要看什么。
完整的class路径如下...
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 点。这让我觉得这可能是一个 class 加载程序问题,但我在 class 路径上只有 class 名称 JAXBToStringStrategy。
这个问题的根源在于 JAXBToStringStategy 将其定义从接口更改为具体 class。
将生成 classes 的 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>
我正在从 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)
我知道在 class 路径上我只有 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 并执行以下命令,它会给我一个对象实例。
ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
我不知道接下来要看什么。
完整的class路径如下...
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 点。这让我觉得这可能是一个 class 加载程序问题,但我在 class 路径上只有 class 名称 JAXBToStringStrategy。
这个问题的根源在于 JAXBToStringStategy 将其定义从接口更改为具体 class。
将生成 classes 的 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>