为什么JAXB不允许所有来自同一成员变量的getter上的注释?

Ber*_*iri 5 java cxf spring-mvc jax-ws jaxb

为什么示例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;
 }
}
Run Code Online (Sandbox Code Playgroud)

例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();
 }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*sel 5

我相信如果访问器直接查看实例变量而忽略访问器,并且在示例B中没有正确名称的实际实例变量.您必须明确告诉它在类上使用@XmlAccessorType(XmlAccessType.NONE),在get/set方法上使用@XmlElement和@XmlAttribute.至少,这就是我最终用JAXB映射做的事情.

  • XmlAccessType.NONE将起作用,但它不正确.NONE表示仅映射明确注释的内容.如果您使用FIELD或PROPERTY,那么您可以利用默认值.我仍然认为您的问题涉及指定PROPERTY访问但注释字段. (3认同)
  • Bernard使用property作为访问类型,因此只应检查get/set方法. (2认同)