使用eclispelink时,嵌套的@XmlJavaTypeAdapter注释被忽略,其中嵌套对象是通用的

|| 编组对象树时,我使用的是
@XmlJavaTypeAdapter
。一些适配器返回本身带有“ 0”注释的类的对象。当我使用与Websphere 7打包在一起的JAXB实现时,这很好用,但是当我使用
org.eclipse.persistence.jaxb.JAXBContextFactory
时,第一个适配器返回的对象上的
@XmlJavaTypeAdapter
注释将被忽略。这是一个已知问题,还是我做错了什么?
public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class,C.class);

        System.out.println(jc.getClass());

        Root root = new Root();
        A a = new A();
        root.a = a;

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}
@XmlRootElement
public class Root {

   @XmlJavaTypeAdapter(AAdapter.class)
   public A a;

}
一种
public class A {

   public B b = new B();

}
public class B {

  @XmlJavaTypeAdapter(GAdapter.class)
  @XmlElement(name=\"b\")
  public G<C> gc = new G<C>();

  public B(){
    gc.t = new C();
  }
}
C
public class C {

    public String c = \"Foo\";

}
G
public class G<T> {

  T t;

}
然后是ѭ10的适配器...
public class AAdapter extends XmlAdapter<B, A> {

    @Override
    public A unmarshal(B b) throws Exception {

        A a = new A();
        a.b = b;

        return a;
    }

    @Override
    public B marshal(A a) throws Exception {

        return a.b;
    }

}
和通用类型的适配器
public class GAdapter<T> extends XmlAdapter<T, G<T>> {

  @Override
  public G<T> unmarshal(T c) throws Exception {

    return new G<T>();
  }

  @Override
  public T marshal(G<T> g) throws Exception {

    return g.t;
  }

}
mar13级时被封送
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>

<root>

    <a>

    <b xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"c\">

        <c>Foo</c>

    </b>

    </a>

</root>
org.eclipse.persistence.jaxb.JAXBContext
在一起时
<?xml version=\"1.0\" encoding=\"UTF-8\"?>

<root>

   <a>

      <b>forum237.C@23752375</b>

   </a>

</root>
我认为问题在于泛型类型。目标是跳过通用类型,仅封送
T
,并处理
T
的注释(如果有)。     
已邀请:
        注意:我是EclipseLink JAXB(MOXy)的负责人。 我已经能够重新创建此问题,并确认这是一个错误(https://bugs.eclipse.org/350626)。 根
package example;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement
public class Root {

    @XmlJavaTypeAdapter(AAdapter.class)
    public A<B> a;

}
一种
package example;

public class A<T> {

    public T t;

}
适配器
package example;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class AAdapter<T> extends XmlAdapter<T, A<T>> {

    @Override
    public A<T> unmarshal(T v) throws Exception {
        return new A<T>();
    }

    @Override
    public T marshal(A<T> v) throws Exception {
        return v.t;
    }

}
package example;

public class B {

}
演示版
package example;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class, B.class);

        Root root = new Root();
        A<B> a = new A<B>();
        a.t = new B();
        root.a = a;

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}
输出量
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<root>
   <a>example.B@3ecfff</a>
</root>
预期产量
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<root>
    <a xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"b\"/>
</root>
    

要回复问题请先登录注册