提问人:Pichou Bichou 提问时间:8/30/2023 更新时间:8/31/2023 访问量:38
使用通过 JAXB2 生成的类的 Pbm 封送 XML
Pbm marshaling XML with classes generated via JAXB2
问:
今天是我想我会发疯的一天。
我想生成一些代码以便能够mashshall/unmarshall XML文件。 我从传递给 JAXB2 的 XSD 开始,以通过 maven 模块生成 Java 类 =>没关系。
然后我使用这些生成的类进行第一次测试以创建基本的 XML 文件,但我遇到以下错误:无法将类型“com.xxx.xxx.AudioService”序列化为元素,因为它缺少@XmlRootElement注释
public static void marshal() throws JAXBException, IOException {
AudioService audioService = new AudioService();
audioService.setName("TTS1");
audioService.setEngineClass("Toto");
JAXBContext context = JAXBContext.newInstance(AudioService.class);
Marshaller mar= context.createMarshaller();
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
mar.marshal(audioService, new File("./test.xml"));
}
但是我生成的类 AudioService 看起来:
package com.xxx.xxx;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElementRef;
import jakarta.xml.bind.annotation.XmlMixed;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.XmlValue;
@XmlRootElement(name = "audio-service")
public class AudioService {
@XmlElement(name = "property")
protected List<AudioService.Property> properties;
@XmlElement(required = true)
protected AudioService.Tts tts;
有谁知道为什么会抛出这个错误,因为一切似乎都很好?
请注意,它是在 java 17 下运行的, javax.xml.bind:jaxb-api = 2.3.1 jakarta.xml.bind:jakarta.xml.bind-api=4.0.0
谢谢
答:
0赞
Pichou Bichou
8/31/2023
#1
感谢您的回答,它给了我检查我的依赖项的想法。 最后,我在与我有混合依赖关系的 pom 中找到了 pbm
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency> I had mix import with :
和
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
由于我已经删除了javax.xml.bind包,现在已解决!
再次感谢
评论
@XmlElement(required = true)
jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.0
org.glassfish.jaxb:jaxb-runtime:jar:4.0.2