我对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很好(
)但是在解封后计算“msg.getobj()”时,得到的不是SomeBean实例,而是elementnsimpl。
所以,我的问题是,如何才能取回我已经封送的SomeBean对象?
提前感谢。
最后用这个答案解决了这个问题: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?(我试过这个,但没有成功……)