Почему JAXB не допускает аннотации для геттеров, которые все получают из одной и той же переменной-члена? - PullRequest
5 голосов
/ 15 декабря 2010

Почему работает пример A, в то время как в примере B выбрасывается «аннотация JAXB для метода, который не является исключением свойства JAXB»?

Я использую JAX-WS с Spring MVC.

Пример A

package com.casanosa2.permissions;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "FooXMLMapper")
public class FooXMLMapper implements IFoo {

 @XmlElement
 private final boolean propA;

 @XmlElement
 private final boolean propB;

 public FooMapper(IFoo foo) {
  propA = foo.getPropA()
  propB = foo.getPropB()
 }

 public FooMapper() {
  propA = false;
  propB = false;
 }

 @Override
 public boolean getPropA() {
  return propA;
 }

 @Override
 public boolean getPropB() {
  return propB;
 }
}

Пример B

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "FooXMLMapper")
public class FooXMLMapper {

 private final IFoo foo;

 public FooMapper() {
  foo = new IFoo() {

   @Override
   public boolean getPropA() {
    return false;
   }

   @Override
   public boolean getPropB() {
    return false;
   }

  };
 }

 public FooXMLMapper(IFoo foo) {
  this.foo = foo;
 }

 @XmlElement
 public boolean getPropA() {
  return foo.getPropA();
 }

 @XmlElement
 public boolean getPropB() {
  return foo.getPropB();
 }
}

Ответы [ 3 ]

5 голосов
/ 16 декабря 2010

Я полагаю, что методы доступа игнорируются, если он смотрит непосредственно на переменные экземпляра, а в вашем примере B нет реальных переменных экземпляра с правильным именем. Вы должны явно указать использование @XmlAccessorType (XmlAccessType.NONE) в классе, а также @XmlElement и @XmlAttribute в методах get / set. По крайней мере, это то, что я закончил с моим JAXB-отображением.

2 голосов
/ 16 декабря 2010

Я еще не пробовал ваш код, но это пример A, который выглядит неправильно, а не B. В примере A вы указали методы доступа к свойству (методы get / set), но вместо этого вы аннотировали поля класса (переменные экземпляра) .

1 голос
/ 15 декабря 2010

Я полагаю, что это правильное свойство JAXB, для них вам нужны как сеттеры, так и геттеры.(вам также может понадобиться конструктор по умолчанию).

...