【问题标题】:Java SimpleXML populates inner object with class attributeJava SimpleXML 使用类属性填充内部对象
【发布时间】:2019-06-24 19:35:41
【问题描述】:

我是 Simple 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;
    }
}

附:这不是thisthis 的重复。

【问题讨论】:

    标签: java android xml simple-framework


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2022-11-25
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      相关资源
      最近更新 更多