【问题标题】:Convert jaxb xml message to base type in apache camel (java)将 jaxb xml 消息转换为 apache camel (java) 中的基本类型
【发布时间】: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 注释消息从各种类型转换为某种基类型,以便从基类中获取信息?

我更喜欢使用接口而不是基类,但我得到了类似的结果。

【问题讨论】:

标签: java jaxb apache-camel


【解决方案1】:

MyRequest 类的元数据可能未得到处理,因为子类不在其中。尝试在超类上添加 @XmlSeeAlso 注释:

@XmlRootElement
@XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType(propOrder = {})
@XmlSeeAlso({MyRequest.class})
static abstract class Request {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多