【发布时间】:2014-06-19 11:48:16
【问题描述】:
我正在尝试为我的所有骆驼(v 2.13.1)路线构建一个全局错误处理程序。如果异常冒泡到此错误处理程序,它将记录它并向团队发送电子邮件。
不过,我在多态性和我的 jaxb 注释消息方面遇到了问题。我的所有消息都与此类似:
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType(propOrder = {})
static abstract class Request {
@XmlElement(required = true)
abstract String getThing();
abstract void setThing(final String thing);
}
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType(propOrder = {})
static class MyRequest extends Request {
private String name;
@XmlElement(required = true)
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
private String thing;
@Override
@XmlElement(required = true)
public String getThing() {
return thing;
}
public void setThing(final String thing) {
this.thing = thing;
}
}
我正在使用的错误路线如下所示:
from (errorQueue)
.convertBodyTo(Request.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final Request req = exchange.getIn().getBody(Request.class);
log.info("name = {}, thing = {}", null, req.getThing());
}
});
根据失败的组件,消息可能是 MyRequest、MyOtherRequest 等。所有消息都继承自 Request。这是我正在测试的特定消息:
<myRequest>
<name>some_name</name>
<thing>some_thing</thing>
</myRequest>
当我运行它时,我得到如下错误:
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"myRequest"). Expected elements are <{}request>
如何将 jaxb 注释消息从各种类型转换为某种基类型,以便从基类中获取信息?
我更喜欢使用接口而不是基类,但我得到了类似的结果。
【问题讨论】:
-
你可以尝试使用链接中的 jaxb unmarsheller camel.apache.org/jaxb.html
标签: java jaxb apache-camel