Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSimpleXML用class属性填充内部对象_Java_Android_Xml_Simple Framework - Fatal编程技术网

JavaSimpleXML用class属性填充内部对象

JavaSimpleXML用class属性填充内部对象,java,android,xml,simple-framework,Java,Android,Xml,Simple Framework,我不熟悉简单的XML,但我遇到了在内部元素中填充不需要的对象的问题 实际问题是,我希望有这样的层次结构: <Request> <SpecificRequest> <UniqueID></UniqueID> or <Password></Password> </SpecificRequest> </Request> 特定请求

我不熟悉简单的XML,但我遇到了在内部元素中填充不需要的对象的问题

实际问题是,我希望有这样的层次结构:

<Request>
    <SpecificRequest>
         <UniqueID></UniqueID>
             or
         <Password></Password>
    </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;
    }
}
和特定数据类:

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;
    }
}

注意:这不是或的重复。

在SimpleXml@Element注释中添加UIDData.class作为类型

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;
        }
    }
公共类TestClass{
私有字符串getXmlBody(对象o,匹配器匹配器)引发异常{
格式=新格式(4“”);
Serializer Serializer=新的持久化器(新的AnnotationStrategy(),匹配器,格式);
Writer-Writer=新的StringWriter();
serializer.write(o,writer);
writer.write('\n');
返回writer.toString();
}    
公共静态void main(字符串[]args)引发异常{
数据=新UIDData(“某些UUID值”);
SpecificRequest SpecificRequest=新的SpecificRequest(数据);
请求=新请求(特定请求);
System.out.println(getXmlBody(request,newregistrymatcher());
}
}
@Root(name=“请求”)
类请求{
@元素(name=“SpecificRequest”)
私人专用请求MSSpecificRequest;
公共请求(特定请求特定请求){
msSpecificRequest=specificRequest;
}
}
类特定请求{
@元素(类型=UIDData.class)
私有数据;
公共特定请求(数据){
mData=数据;
}
}
抽象类数据{
私有字符串mType=“”;
受保护数据(字符串类型){
mType=类型;
}
//其他抽象的东西
}
类UIDData扩展数据{
@元素(name=“UniqueID”)
私有字符串mUID;
公共UIDData(字符串UID){
超级("UID);;
mUID=UID;
}
}