Ошибка с @XmlAnyAttribute и методами? (используя JAXB RI) - PullRequest
1 голос
/ 14 ноября 2011

У меня проблема с моим JAXB. У меня есть метод с @XmlAnyAttribute (на моем геттере), но, похоже, он не работает с сеттером (используя JAXB RI, если это важно).

Упрощенный код:

@XmlRootElement( name = "element" )
@XmlAccessorType( value = XmlAccessType.PUBLIC_MEMBER )
public class Element
{
    private Map<QName, String> convertedAttributes = new HashMap<QName, String>();

    private List<Attribute> attributes = new ArrayList<Attribute>();

    @XmlAnyAttribute
    public Map<QName, String> getConvertedAttributes() throws Exception
    {
        if ( attributes != null )
        {
            return new AttributeMapAdapter().marshal( attributes );
        }

        return new HashMap<QName, String>();
    }

    public void setConvertedAttributes( Map<QName, String> convertedAttributes )
    {
        this.convertedAttributes = convertedAttributes;
    }

    @XmlTransient
    public List<Attribute> getAttributes()
    {
        return attributes;
    }

    public void setAttributes( List<Attribute> attributes )
    {
        this.attributes = attributes;
    }
}

Эта работа отлично подходит для сортировки, и я получаю вывод, который хочу. Но когда я пытаюсь разобрать его, никакие значения не отправляются установщику.

Я попытался переместить аннотацию @XmlAnyAttribute в поле, и она работает нормально (но тогда я не могу выполнить адаптацию в геттере).

Это похоже на ошибку, но я не уверен. Есть идеи? Я использую Java 1.6 на Mac OS X (10.7.2)

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Это не ошибка в JAXB RI.Проблема в вашем getConvertedAttributes() методе.Следующее работает немного лучше:

public Map<QName, String> getConvertedAttributes() throws Exception
{
    if(!convertedAttributes.isEmpty()) {
        return convertedAttributes;
    }
    if ( attributes != null ) {
        convertedAttributes = new AttributeMapAdapter().marshal( attributes ); 
    } else {
        convertedAttributes = new HashMap<QName, String>();
    }
    return convertedAttributes;
}
0 голосов
/ 14 ноября 2011

Ваш сеттер должен снова разобрать карту. Поэтому вам нужен адаптер для другого направления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...