InvalidDefinitionException:无法构造“javax.xml.bind.JAXBElement”的实例(不存在类似默认构造的创建者)
我在读取XML文件时遇到问题。我使用多个XSD文件和一个maven插件生成了XML绑定。我在Github上推出了一个问题的最小可重现性示例: 生成xml绑定类的Maven插件:InvalidDefinitionException:无法构造“javax.xml.bind.JAXBElement”的实例(不存在类似默认构造的创建者),java,xml,jackson,xsd,jaxb,Java,Xml,Jackson,Xsd,Jaxb,我在读取XML文件时遇到问题。我使用多个XSD文件和一个maven插件生成了XML绑定。我在Github上推出了一个问题的最小可重现性示例: 生成xml绑定类的Maven插件: <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifac
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<id>cobieLiteRc4</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<forceRegenerate>true</forceRegenerate>
<generateDirectory>${project.build.directory}/generated-sources/cobielite
</generateDirectory>
<schemaDirectory>${project.basedir}/src/main/resources/cobielite/rc4</schemaDirectory>
<schemaIncludes>
<inclucde>cobielite.xsd</inclucde>
</schemaIncludes>
<bindingDirectory>
${project.basedir}/src/main/resources/cobielite/rc4
</bindingDirectory>
<addCompileSourceRoot>true</addCompileSourceRoot>
<strict>false</strict>
</configuration>
</execution>
</executions>
</plugin>
更新 问题是JAXB生成了JAXBElement包装类,在使用XMLMapper类时,这似乎是不可解析的 同样的问题:
解决方法 作为一种解决方法,我更改了如何读取xml文件的实现:
final XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(new JaxbAnnotationModule());
xmlMapper.setDefaultUseWrapper(true);
xmlMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
xmlMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
xmlMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
xmlMapper.configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true);
xmlMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try (InputStream is = new FileInputStream(new File("cobieLiteExample.xml"))) {
final FacilityType facilityType = xmlMapper.readValue(is, new TypeReference<FacilityType>() {
});
}
JAXBContext jc = JAXBContext.newInstance("org.buildingsmartalliance.docs.nbims03.cobie.cobielite");
Unmarshaller u = jc.createUnmarshaller();
final JAXBElement<FacilityType> facilityTypeJAXBElement = (JAXBElement<FacilityType>) u.unmarshal(is);
final FacilityType facilityType = facilityTypeJAXBElement.getValue();
JAXBContext jc=JAXBContext.newInstance(“org.buildingsmartalliance.docs.nbims03.cobie.cobielite”);
解组器u=jc.createUnmarshaller();
最终JAXBElement设备类型JAXBElement=(JAXBElement)u.unmarshal(is);
final FacilityType FacilityType=facilityTypeJAXBElement.getValue();
任何帮助都将不胜感激
JAXBContext jc = JAXBContext.newInstance("org.buildingsmartalliance.docs.nbims03.cobie.cobielite");
Unmarshaller u = jc.createUnmarshaller();
final JAXBElement<FacilityType> facilityTypeJAXBElement = (JAXBElement<FacilityType>) u.unmarshal(is);
final FacilityType facilityType = facilityTypeJAXBElement.getValue();