2011-07-06 12 views
2

私はこのスキーマを持っており、JAXBを使ってJavaスタブファイルを生成しています。JAXBバインド - リスト<T>の戻り値の型を定義

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:c="http://www.a.com/f/models/types/common" 
    targetNamespace="http://www.a.com/f/models/types/common" 
    elementFormDefault="qualified"> 

    <xs:complexType name="constants"> 
     <xs:sequence> 
      <xs:element name="constant" type="c:constant" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="constant"> 
     <xs:sequence> 
      <xs:element name="reference" type="c:reference"/> 
     </xs:sequence> 
     <xs:attribute name="name" use="required" type="xs:string"/> 
     <xs:attribute name="type" use="required" type="c:data-type"/> 
    </xs:complexType> 

は、デフォルトのJavaパッケージ名は「com.afmodels.types.common」

私も「定数」と「定数」が定義されたパッケージの「com.afmodel.commonの既存のインタフェースを持っています' 私は生成されたクラスを使用したい。私は 必要なインタフェースに

<jxb:bindings schemaLocation="./commonmodel.xsd" node="/xs:schema"> 
    <jxb:bindings node="xs:complexType[@name='constants']"> 
     <jxb:class/> 
     <inheritance:implements>com.a.f.model.common.Constants</inheritance:implements> 
    </jxb:bindings> 

を実装して、以下の生成されたクラスが

package com.a.f.models.types.common; 
.. 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "constants", propOrder = { 
    "constant" 
}) 
public class Constants 
    implements com.a.f.model.common.Constants 
{ 

    @XmlElement(required = true) 
    protected List<Constant> constant; 

    public List<Constant> getConstant() { 

しかし、戻り値の型適切なインターフェイスを実装しています生成されたJavaクラスを確保するためにJAXBバインディングファイルを使用していますリストの<> getConstant()メソッドが正しくありません。私はこれが必要です

public List<com.a.f.model.common.Constant> getConstant() { 

jaxbバインディングファイル経由でこれを行うには遠いですか?

答えて

2

Iは、メソッドのリターンタイプはJAXBは定数既存のインタフェースを実装しない定数クラスを生成しているので、それらの戻り型

package com.a.f.m.common; 

import java.util.List; 

public interface Constants { 

    public List<? extends Constant> getConstant(); 
} 

内の既存のインタフェースをより柔軟にするためにJavaのジェネリックを使用して、この周囲に働い許可されます。 JAXBバインディングファイルを使用して戻り値の型を宣言することはできないようです。