2016-08-12 6 views
3
  • Использование JAXB 2.1 для создания Java код из XSD-
  • jaxb2-основы плагин используется
  • хочет иметь сгенерированный класс Fragment для реализации Comparable<Fragment>
public class Fragment implements Serializable, Comparable<Fragment> { 
    ... 
    public int compareTo(Fragment other) { 
    ..... 
    return 0; 
    } 
} 

С ниже привязок JAXB файлJAXB 2.1 реализует Сопоставимые <T> для сгенерированного класса

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector" 
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" 
    jxb:extensionBindingPrefixes="xjc" 
    jxb:version="2.1"> 
    <jxb:bindings> 
     <jxb:globalBindings> 
      <xjc:serializable uid="12343" /> 
     </jxb:globalBindings> 
    </jxb:bindings> 
    <jxb:bindings schemaLocation="../schemas/Fragment.xsd" 
     version="1.0" node="/xs:schema"> 
     <jxb:bindings node="//xs:element[@name='Fragment']/xs:complexType">   
      <inheritance:implements>java.lang.Comparable</inheritance:implements> 
      <ci:code>   
public int compareTo(Fragment other) { 

    return fragmentVersion.compareTo(other.fragmentVersion); 
} 
      </ci:code> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

Способный генерировать класс, как показано ниже:

public class Fragment implements Serializable, Comparable { 
    ... 
    public int compareTo(Fragment other) { 
    return fragmentVersion.compareTo(other.fragmentVersion); 
    } 
} 

Выпуск: Как вы видите, класс порождается как implements Comparable вместо implements Comparable<Fragment>.

Уверен, отсутствует что-то. Любая помощь для решения оценивается.

+1

Вы на самом деле пытались '<наследования: орудия> java.lang. Сопоставимый < Фрагмент > '? – lexicore

+0

@lexicore, я попробовал ' java.lang.Comparable ', в котором показывалась ошибка, требующая закрытия тега. Просто попробовал ваше предложение, и это работает. Это должен быть ответ, и я счастлив принять его. Огромное спасибо. – Rao

ответ

3

JAXB2-Основы поддержки дженериков.

Просто используйте:

<inheritance:implements>java.lang.Comparable&lt;Fragment&gt;</inheritance:imple‌​ments> 
4

Во время тестирования решения, предоставленного lexicore, заметил еще один способ решить эту проблему:

<inheritance:implements><![CDATA[java.lang.Comparable<Fragment>]]></inheritance:implements>