Wsdl2Java生成含JAXBElement列表类引发序列化异常的解决问询
解决JAXB生成类转XML时的JAXBElement实例化异常
问题场景
在基于Gradle的SpringBoot项目中,使用com.github.bjornvester.wsdl2java插件集成某税务服务的WSDL后,生成的AddressType类包含一个带@XmlElementRefs注解的protected List<JAXBElement<?>> content属性。当尝试将该类的Java对象转换为XML时,抛出com.fasterxml.jackson.databind.exc.InvalidDefinitionException,核心错误提示为无法构造jakarta.xml.bind.JAXBElement实例。
尝试过的无效方案
- 尝试使用XJB绑定文件修改属性生成规则,期望生成包含
getCountryCodeOrAddressFreeOrAddressFix()这类明确属性访问方法的类,但由于WSDL存在多层XSD导入,XPath匹配规则未生效,修改失败。 - 尝试自定义实现属性的序列化逻辑,未解决核心的
JAXBElement实例化问题。
有效解决方案
通过对应生成的ObjectFactory类中的创建方法,逐个生成content列表所需的JAXBElement实例并添加到列表中,即可正常完成Java对象到XML的转换。
示例代码片段:
ObjectFactory factory = new ObjectFactory(); AddressType address = new AddressType(); // 使用ObjectFactory的方法创建JAXBElement实例并添加到content列表 address.getContent().add(factory.createAddressTypeCountryCode("ES")); address.getContent().add(factory.createAddressTypeAddressFix("Calle Ejemplo 123"));
内容的提问来源于stack exchange,提问作者etrigo
相关产品推荐
相关产品推荐

