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

日本航空研究局@XmlMixed和@XmlAdapter

锺离马鲁
2023-03-14

我试图创建一个@XmlAdapter来将混合列表中的单词拆分成一个名为Word的包装类的对象。此字段还可能包含名为Group的单词扩展的实例

其想法是:

<span>Some text and a <g>group of words</g> and more<span>

等于:

span.getContent().add(new Word("Some");
span.getContent().add(new Word("text");
span.getContent().add(new Word("and");
span.getContent().add(new Word("a");
span.getContent().add(new Group("group of words");
span.getContent().add(new Word("and");
span.getContent().add(new Word("more");

我正在与我能想到的所有可能的组合ox Xml混合和XmlAdapter作斗争,但没有运气!

这是我的latets适配器,根本不能用:

public class SpanAdapter extends XmlAdapter<List<Word>, List> {

@Override
public List<Word> marshal(List v) throws Exception {
    List<Word> list = new ArrayList<>();
    for (Object o : v) {
        if (o instanceof String) {
            String s = (String) o;
            StringTokenizer st = new StringTokenizer(s, " ");
            while (st.hasMoreElements()) {
                Word word = new Word();
                word.setValue(st.nextToken());
                list.add(word);
            }
        } else if (o instanceof Group) {
            list.add((Group) o);
        }
    }
    return list;
}

@Override
public List unmarshal(List<Word> v) throws Exception {
    List list = new ArrayList<>();
    for (Word w : v) {
        if(w instanceof Group){
            list.add(w);
        } else{
            list.add(w.getValue()+ " ");
        }
    }
    return v;
}

}

还有我的跨度类:

@XmlRootElement(name = "span")
public class Span extends AudioComponent implements Item.Component {

private List<Word> value = new ArrayList();

@XmlMixed
@XmlElementRefs({
        @XmlElementRef(type = Group.class),
        @XmlElementRef(type = Word.class)
})
@XmlJavaTypeAdapter(SpanAdapter.class)
public List<Word> getValue() {
    return value;
}

public void setValue(List<Word> value) {
    this.value = value;
}

}

单词和组只是字符串的包装。组扩展Word。

我正在使用MOXY,以防万一它有帮助。

提前感谢!

共有1个答案

蔡弘扬
2023-03-14

如果它对任何人都有帮助:

我通过在包含 Span 元素的列表字段中设置适配器来设法做到这一点。

在包级别或Span类级别设置适配器不起作用。

此外,适配器不是从列表转换到列表,而是从 Span 转换到 Span,并在内部修改列表。

最终配置是:

我定义适配器的位置:

@XmlElementRefs({
        @XmlElementRef(type = Span.class),
        @XmlElementRef(type = Other.class),
        @XmlElementRef(type = Another.class)

})
@XmlJavaTypeAdapter(value = SpanAdapter.class)
public List<Component> getComponents() {
    if (components == null) components = new ArrayList();
    return components;
}

适配器(不能从一个跨度到另一个跨度,因为我在可能包含其他类的List字段中使用它):

public class SpanAdapter extends XmlAdapter<Object, Object> {

@Override
public Object unmarshal(Object o) throws Exception {
    if (o instanceof Span) {
        Span span = (Span) o;
        List<Span.Component> list = new ArrayList<>();
        for (Object child : span.getValue()) {
            if (child instanceof String) {
                String s = (String) child;
                for (String w : s.split(" ")) {
                    Word word = new Word();
                    word.setValue(w.trim());
                    list.add(word);
                }
            } else if (child instanceof Group) {
                list.add((Group) child);
            }
        }
        span.setValue(list);
        return span;
    }
    return o;
}

@Override
public Object marshal(Object o) throws Exception {
    if(o instanceof Span) {
        Span span = (Span) o;
        List list = new ArrayList<>();
        Iterator<Span.Component> iterator = span.getValue().iterator();
        while (iterator.hasNext()) {
            Span.Component w = iterator.next();
            if (w instanceof Group) {
                list.add(w);
            } else if (w instanceof Word) {
                String value = ((Word) w).getValue();
                list.add(iterator.hasNext() ? value + " " : value);
            }
        }
        span.setValue(list);
        return span;
    }else return o;
}
}
 类似资料:
  • 问题内容: 我有一个包含的字符串变量 字符串不包含空格。我想编写一个仅打印包含(az)的单词的正则表达式,我尝试了一个简单的正则表达式 match对象仅包含单词,而单词不匹配。 使用时,我可以同时获得和。 我的问题是为什么我们不能这样做? 如何处理? 问题答案: 在字符串documenation中找到 一次 模式: 扫描字符串以查找正则表达式模式产生匹配项的位置,然后返回相应的MatchObjec

  • 应聘岗位    雷达信号处理算法 流程   自我介绍 项目介绍 全程跟问项目,参与哪些部分,做了哪些工作,还问雷达系统相关的基础知识 面完第二天打电话说通过,现在在等综合面试 #空天院齐鲁研究院#

  • 可实施的谍报技术通常是持续对一个特定目标的挖掘。在进行比赛性的Wargame时你将会几乎将所有经历集中在规避检测并不暴露你的工具集(基础工具、漏洞利用)的风险。 课程 Post-Exploitation and Operational Security A Brief History of CTF and Tradecraft Operational Use of Offensive Cyber

  • #24届软开秋招面试经验大赏# 腾讯会议面试 线上 整体不难 没有手撕题目 线下的话就是笔试+技术面+HR面一天走完 - 自我介绍 - 了解实习情况、内容 - 开发中碰到的难点、有印象的事情 - 上面的难题,你自己觉得怎么解决比较好 - ES6的各种知识点以及应用场景 - 闭包以及应用场景 - weakmap weakset weakref - 对 react 的理解 - 函数组件类组件区别 -

  • #中科院空天信息创新研究院# 5月5号校招提前批中科院空天信息研究院 苏州 数据开发 自我介绍 介绍项目,介绍下项目中遇到的困难 问了一下了不了解微服务 问了hbase 的数据存储格式 regionserver的作用 对hbase的优化 实习过程中接触过docker k8s对吗? 平时学习或者工作中遇到过什么bug,怎么解决的? 期望薪资 是否能来实习 未来想进国企,研究所还是互联网企业 能否接受

  • 下面考察本章的一个练习,即点、圆、圆柱体的层次结构。我们首先开发并使用类 Point(图9.8),然后从类Point派生出类Circle(图9.9),最后从类Circle派生出类 Cylinder(图9.10)。 图9.8列出了类Point。图中的第1行到第17行是类 Point 的定义。可以看到,类Point的数据成员为protected。因此.当从类Point派生出类Circle时,类Circ