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

JAXB解封泛型对象

郑衡
2023-03-14

我对JAXB很陌生,在解封一般对象时遇到了麻烦。问题是我需要能够封送和解封任何对象(java.lang.object)。我成功地进行了封送处理,但是当我运行解封处理时,响应中得到的是一个“ElementNSimpl”对象,而不是我自己的对象。
这是涉及的bean:
message.java

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
    @XmlAnyElement(lax=true)
    private Object obj;
    //getter and setter
}


somebean.java

@XmlRootElement(name="somebean")
public class SomeBean {
    private String variable;
    //getter and setter
}
Message m = new Message();
SomeBean sb = new SomeBean();
sb.setVariable("lalallalala");
m.setObj(sb);

JAXBContext jaxbContext = JAXBContext.newInstance("jaxb.entities");
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(m, sw);
System.out.println(sw.toString());  //this shows me the xml correctly

//unmarshal code
JAXBContext jc = JAXBContext.newInstance(Message.class);
StringReader reader = new StringReader(sw.toString());
Unmarshaller unmarshaller = jc.createUnmarshaller();
Object result = unmarshaller.unmarshal(reader);
Message msg = (Message)result;


jaxb.index的内容:

Message
SomeBean

生成的xml很好( lalallalala )但是在解封后计算“msg.getobj()”时,得到的不是SomeBean实例,而是elementnsimpl。
所以,我的问题是,如何才能取回我已经封送的SomeBean对象?
提前感谢。

共有1个答案

龙兴贤
2023-03-14

最后用这个答案解决了这个问题:https://stackoverflow.com/a/9081855/1060779,我应用了两次解封处理:

    Unmarshaller unmarshaller = jc.createUnmarshaller();
    Object result = unmarshaller.unmarshal(reader);
    Message msg = (Message)result;
    if (msg.getObj() instanceof Node) {
        ElementNSImpl e = (ElementNSImpl)msg.getObj();
        Class<?> clazz = Class.forName(packageName.concat(".").concat(e.getNodeName()));
        jc = JAXBContext.newInstance(clazz);
        unmarshaller = jc.createUnmarshaller();
        SomeBean sBean = (SomeBean)unmarshaller.unmarshal((ElementNSImpl)msg.getObj());
        System.out.println(sBean.toString());
    }
 类似资料:
  • 我正在尝试使用JAXB从遗留系统中解压XML文档。我的xml结构如下所示:

  • 基本上,我要做的是创建一个封送器,它可以接收我给它的任何类对象,例如,car对象或person对象,并且它必须返回一个XML字符串。 警告:发生了非法的反射访问操作

  • 我有如下所示的XML: 我有一个ObjectList类,它如下所示: 和如下所示的对象类: 当我尝试使用以下代码将xml解封到and对象中时: 我得到以下错误: UnMarshalException:意外元素(URI:“”,本地:“ObjectList”)。需要的元素为<{}Object>、<{}ObjectList> 编辑:我刚刚注意到两个问题我将我的ObjectList对象的XmlRootEl

  • 我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类

  • 同样,在导出时没有错误。问题是getCityWeatherbyZipresponse.getCityWeatherbyZipResult的值为null。我知道文档正在返回正确的结果,因为结果打印如下: 结果打印输出: 测试Web服务:http://wsf.cdyne.com/weatherws/weather.asmx 子umarshal对象:

  • 我有这些课程: 用户 地址 输出 我如何解决这个问题?我是否可以使用一些JAXB注释?怎么做?还是需要创建某种类型的XmlAdapter?(我试过这个,但没有成功……)