JAXB Binding - определил тип возвращаемого значения методов List <T> - PullRequest
2 голосов
/ 06 июля 2011

У меня есть эта схема, и я использую JAXB для создания файлов заглушки Java.

<?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 ', который я хочу, чтобы сгенерированные классы использовали.Я использую файл привязки jaxb, чтобы сгенерированные классы Java реализовали необходимые интерфейсы

<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() {

Но тип возвращаемого значения метода List <> getConstant () неверен.Мне нужно, чтобы это было

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

Можно ли это сделать через файл привязки jaxb?

1 Ответ

2 голосов
/ 13 июля 2011

Я работал над этим, используя java Generics, чтобы сделать существующие интерфейсы более гибкими в своем типе возвращаемого значения

package com.a.f.m.common;

import java.util.List;

public interface Constants {

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

Поскольку класс Constant, сгенерированный JAXB, действительно реализует существующий интерфейс Constant, тип возвращаемого значения для методапозволено.Кажется невозможным использовать файл привязок JAXB для объявления типа возвращаемого значения.

...