引用了第三方jar包和钉钉的jar包,钉钉jar包没引入前正常,引入后报错
javax.xml.bind.PropertyException: name: com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler value: com.mybank.api.internal.util.JaxbUtil$1@1a257f01
com.mybank.api.internal.util.JaxbUtil为第三方jar包的实现类
解决方案
<!--钉钉sdk-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dingtalk</artifactId>
<version>1.1.86</version>
<exclusions>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
去除 jaxb-core和jaxb-impl就行
<exclusions>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
问题debug
因为JAXBContext使用工厂模式,很难去看到底层如何获取实现类,只能一层一层debug。
ContextFinder 类里面有个 resourceURL = classLoader.getResource(resource);
此记录将从jar包(jaxb)路径获取,去除后会从其他地方获取