Java SimpleXML用类属性填充内部对象



我是简单XML的新手,但是我遇到了内部元素中不需要的对象填充的问题。

实际问题是我想要这个层次结构:

<Request>
    <SpecificRequest>
         <UniqueID></UniqueID>
             or
         <Password></Password>
    </SpecificRequest>
</Request>

但是有这个:

<Request>
     <SpecificRequest>
        <mData class="com.example.package.UIDData">
           <UniqueID>6252859A</UniqueID>
        </mData>
     </SpecificRequest >
</Request>

类如下所示:

根请求对象:

@Root(name = "Request")
public class Request {
    @Element(name = "SpecificRequest")
    private SpecificRequest mSpecificRequest;
    public Request(SpecificRequest specificRequest) {
        mSpecificRequest = specificRequest;
    }
}

具体请求对象:

public class SpecificRequest {
    private Data mData;
    public SpecificRequest(Data data) {
        mData = data;
    }
}

通用数据类:

public abstract class Data {
    private Type mType = Type.None;
    protected Data(Type type) {
        mType = type;
    }
    // other abstract stuff
}

和具体数据类:

public class UIDData extends Data {
    @Element(name = "UniqueID")
    private String mUID;
    public UIDData(String UID) {
        super(Type.UID);
        mUID = UID;
    }
}

附言这不是这个或这个的重复。

添加 UIDData.class 作为 SimpleXml 中的类型 @Element

注释
public class TestClass {
private String getXmlBody(Object o, Matcher matcher) throws Exception {
        Format format = new Format(4, "<?xml version="1.0" encoding="UTF-8" standalone="yes"?>");
        Serializer serializer = new Persister(new AnnotationStrategy(), matcher, format);
        Writer writer = new StringWriter();
        serializer.write(o, writer);
        writer.write('n');
        return writer.toString();
    }    
 public static void main(String[] args) throws Exception {
 Data data = new UIDData("some UUID value ");
 SpecificRequest specificRequest  =  new SpecificRequest(data);
 Request request = new Request(specificRequest);
 System.out.println(getXmlBody(request, new RegistryMatcher()));
        }
    }
    @Root(name = "Request")
    class Request {
        @Element(name = "SpecificRequest")
        private SpecificRequest mSpecificRequest;
        public Request(SpecificRequest specificRequest) {
            mSpecificRequest = specificRequest;
        }
    }
    class SpecificRequest {
     @Element(type = UIDData.class)
        private Data mData;
        public SpecificRequest(Data data) {
            mData = data;
        }
    }
    abstract class Data {
        private String mType = "";
        protected Data(String type) {
            mType = type;
        }
        // other abstract stuff
    }
    class UIDData extends Data {
        @Element(name = "UniqueID")
        private String mUID;
        public UIDData(String UID) {
            super("UID");
            mUID = UID;
        }
    }

最新更新