java - JAXB 编码期间的类转换

标签 java class casting jaxb marshalling

目标:尝试通过参数 c 传递任何类,以便任何类都可以直接使用编码(marshal)处理。

错误:[com.sun.istack.internal.SAXException2:无法将类型“java.lang.Class”编码为元素,因为它缺少@XmlRootElement 注释]

此错误出现在箭头指向的行(-->)

评论:如果我尝试用实际类中的表达式更改第 8 行和第 9 行的 c,那么它就可以正常工作。有没有办法不这样做。我认为不能选类。

public XmlMarshaller(Class c){
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(c);
        Marshaller marshaller = jaxbContext.createMarshaller();

        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        --> marshaller.marshal(c, new File("xmlDyna/asd.xml"));
        --> marshaller.marshal(c, System.out);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}

这是另一个类,以防有人认为错误与缺少的@XmlRootElement 注释有关。

@XmlRootElement( name = "Dynamic")
public class DynamicLoader {

@XmlElement(name = "name")
public String name = "asdasd";

public DynamicLoader(){
    XmlMarshaller marshaller = new XmlMarshaller(this.getClass());
}

public String getName(){
    return name;
}

最佳答案

您应该将 Object 作为参数而不是 Class 传递。然后确保传递类的实例而不是类本身。然后在 object.getClass() 上引导 JAXBContext

关于java - JAXB 编码期间的类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813414/

相关文章:

c++ - 定义复制构造函数和赋值运算符

java - 无法使用 List 进行强制转换

c++ - 将 2D char* 数组传递给函数时出错

python - 如何将 bool 类型的 numpy 数组压缩为 uint8,大小为 1/8

java - Java 的动态代理实际上是如何工作的?

JavaMail Api 列表标题不起作用

java - 微小的图像,没有旋转,但仍然得到 OutOfMemoryError : bitmap size exceeds VM budget

java - Maven 根本不会运行

c++ - 将 &变量传递给函数意味着什么?例如, string& insert ( size_t pos1, const string& str );

class - 在 Swift 中比较一个对象的两个实例