1

我发现了一些其他问题以不同的方式提出这个问题,但这些问题的答案都不起作用。他们引用的站点要么已死,要么不适用于 JAXB2。

我需要的是多个生成的类从一个通用接口继承,因为它们都有一个.getName()方法。

而不是必须if(o instanceof XXX)为每种类型都有一个巨大的块,我宁愿Interface通过强制转换来测试这个常见的并调用.getName().

这是我的界面

package com.mycompany;

public interface Nameable
{
    public String getName();
}

这是我添加到我的 .xjb 绑定文件中的内容

<jxb:bindings version="2.1"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
          xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
          jxb:extensionBindingPrefixes="xjc inheritance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"

...

<jxb:bindings node="//xsd:element[@name='container']">
  <inheritance:implements>com.mycompany.Nameable</inheritance:implements>
</jxb:bindings>

它没有向生成的类添加任何内容。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "contents"
})
@XmlRootElement(name = "container")
public class Container implements Cloneable, CopyTo, Equals, HashCode, MergeFrom, ToString
{
   ...
}

将此界面添加到列表中的神奇咒语是什么?

4

2 回答 2

2
<jxb:bindings node="//xsd:element[@name='container']">
  <inheritance:implements>com.mycompany.Nameable</inheritance:implements>
</jxb:bindings>

需要看起来像

<jxb:bindings node="//xsd:element[@name='container']">
  <jxb:class/>
  <inheritance:implements>com.mycompany.Nameable</inheritance:implements>
</jxb:bindings>

一旦我添加了缺少的节,它就开始按预期工作

于 2011-11-03T20:39:05.923 回答
0

我认为您应该自定义元素的复杂类型。正是这种类型实现了您的界面,因此它是放置自定义/的正确位置implements

于 2011-12-02T07:12:32.010 回答