当前位置: 首页 > 知识库问答 >
问题:

如何创建接受泛型对象的JAXB封送程序

苏麒
2023-03-14

基本上,我要做的是创建一个封送器,它可以接收我给它的任何类对象,例如,car对象或person对象,并且它必须返回一个XML字符串。

 public <T> String CreateXML(T objToSerialize)
    {
        String xml = "";
        try 
        {           

        JAXBContext context = JAXBContext.newInstance(objToSerialize.getClass());
        Marshaller marshaler = context.createMarshaller(); 
        StringWriter writer = new StringWriter();
        marshaler.marshal(objToSerialize.getClass(),writer);
        xml = writer.toString();
            System.out.println(xml);
            return xml;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return xml;
    }

警告:发生了非法的反射访问操作

共有1个答案

岳正浩
2023-03-14

在代码中,封送的是objectToSerialize的类,而不是对象本身。您可以更改这一行

 marshaler.marshal(objToSerialize.getClass(),writer);
 //to
 marshaler.marshal(objToSerialize,writer);

或者尝试以下代码

public static <T> String marshall(T data) {
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(data.getClass());
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        StringWriter stringWriter=new StringWriter();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
        jaxbMarshaller.marshal(data, stringWriter);
        return stringWriter.toString();
    } catch (JAXBException e) {
        e.printStackTrace();
    }
    return null;
}
 类似资料:
  • 我对JAXB很陌生,在解封一般对象时遇到了麻烦。问题是我需要能够封送和解封任何对象(java.lang.object)。我成功地进行了封送处理,但是当我运行解封处理时,响应中得到的是一个“ElementNSimpl”对象,而不是我自己的对象。 这是涉及的bean: message.java somebean.java jaxb.index的内容: 生成的xml很好()但是在解封后计算“msg.ge

  • 问题内容: 我试图编组多个对象,例如添加到via中。我开始使用此设置: 和 但是,我得到了以下运行时例外: javax.xml.bind.JAXBException:com.jaxb.example.marshall.Book或其任何超类对此上下文都是未知的] 我的类型定义如下。 书:- 图书清单:- 马歇尔代码:- 我正在尝试放置注释(参考:-JAXB异常:该上下文未知的类)。该注释在我的版本中

  • 我试图实现一个接受泛型参数的函数定义,只要它扩展了另一个特定的泛型类型。简言之参数A必须扩展参数B,其中A和B都是泛型的。 下面是我的示例 用法示例如下 一些封闭的班级 和函数调用 我不想在抽象类声明中定义E,因为T已经在那里定义了。 我也试着做了以下几点: 将myList定义为接受扩展T的键 将E定义为T类型(无法找到如何指定它在函数中扩展T 但它从来都不起作用。有没有办法做到这一点?我在Sta

  • 我有很多实体扩展了实体,也有很多数据扩展到 我有一个通用的存储库、服务和映射器,如下所示 我的仓库: 我的服务: 我的地图绘制者: 我想在方法中从T创建一个对象,在类中从方法中从Dto创建一个对象

  • 问题内容: 如何创建泛型类型的数组?通用方法如何工作?它返回通用数组的副本。因此可以创建通用数组。但是如何?怎么能写一个类似的方法呢? 问题答案: 如果需要在运行时创建它,则至少需要在此时知道类型,因此可以使用以下方法: where 是泛型类型,是的类,并且是初始大小。 这里的文件

  • 我有以下java示例类: 它正在生成编译器警告: 类型安全:从捕获#1-of?扩展对象到T的未检查强制转换 我完全可以得到精确的T对象,如果我这样做: 它完全知道这是T型的。 为什么我不能创建该类的新实例?我怎样才能修复它? (我没有查找类型为“Add@SuppressWarnings(“unchecked”)”的响应)