在使用JAXB 的xjc任务时出现java.lang.IllegalArgumentException异常,具体如下:
- BUILD FAILED
- C:\Jdeveloper\mywork\xml\xml-schema\build.xml:27: java.lang.IllegalArgumentException: Expectedclass
- javax.xml.bind.annotation.XmlAccessType but found class javax.xml.bind.annotation.AccessType
- Total time: 4 seconds
BUILD FAILED
C:\Jdeveloper\mywork\xml\xml-schema\build.xml:27: java.lang.IllegalArgumentException: Expected class
javax.xml.bind.annotation.XmlAccessType but found class javax.xml.bind.annotation.AccessType
Total time: 4 seconds
出错环境:使用jdk1.6 + jwsdp2.0中自带的jaxb2.0(但是在使用jdk1.5 + jwsdp2.0自带jaxb2.0时却不会出现该异常)
错误原因:
在jdk1.5 并没有将javax.xml.bind纳入其中,在结合jwsdp2.0的jaxb时候使用的是其自带的jaxb-api.jar
而在jaxb-api.jar这个文件中带有javax.xml.bind.annotation.AccessType
但是在使用jdk1.6时,javax.xml.bind已经纳入1.6中,而且将AccessType改名为XmlAccessType(还有AccessorType等),
这时如果再使用jwsdp2.0的jaxb自带的jaxb-api.jar就会出现上述异常
解决办法:升级jaxb,下载jaxb-ri 2.2.1
如附件(从官网下载https://jaxb.dev.java.net/2.2.1/),然后转换到下载目录执行命令:
java -jar JAXB2_20100511.jar
然后使用生成的jaxb-ri-20100511目录下的JAXB的jar包即可。