使用XMLAdapter使用jaxb序列化通用字段

时间:2012-12-30 07:40:14

标签: java xml generics jaxb

我们有一个定义对象ID(UID)的类:

public final class UUID实现Serializable,Comparable { .... }

和另一个班级:

    @XmlType(name = "ChangeFieldValueInstruction")
    public static class ChangeFieldValueInstruction<T> extends Instruction
    {
        private T newVal;

        public ChangeFieldValueInstruction()
        {
            super();
        }

        public ChangeFieldValueInstruction(String fieldPath, T newVal)
        {
            super(fieldPath);
            setNewVal(newVal);
        }


        public T getNewVal()
        {
            return newVal;
        }

        public void setNewVal(T newVal)
        {
            this.newVal = newVal;
        }
      ................
    }

此类(UpdateObjectRequest)通过Web服务(我们使用spring)传递。

我有一个package-info文件,它为UUID.class定义了一个适配器,但是当我们将一个UID对象传递给newVal时,我们看到该适配器未被调用,实际上调用了默认的UID构造函数。 我尝试使用@XmlAnyElement注释getNewVal()方法,并将@XmlJavaTypeAdapter添加到UID类中(如此处建议的那样),但它仍然不起作用。还尝试使用@XmlSeeAlso(UUID.class)注释UpdateObjectRequest 在xsd中我看到newVal被定义为xs:anyType

所以有人知道我怎么能让这个工作? 10倍。

1 个答案:

答案 0 :(得分:0)

不可能,imho。

这应该如何运作?您将拥有SOAP WebService有效内容的动态XML架构。 接收服务如何反应,他无法猜测元素的类型。

使用SOAP,Web服务及其操作,XML类型在WSDL - WebService Definition中预定义。 这就是客户端和服务器可以互操作的方式,因为它们是在有效载荷格式上协商的,这种格式不是动态的。

您需要准确定义哪些消息,类型可以在ws客户端和服务器之间传递