Сериализация статических вложенных членов класса в XStream - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть приложение, которое использует XStream для сериализации и десериализации классов в XML.Это прекрасно работает.У меня есть вопрос, являются ли статические внутренние классы сериализуемыми.Согласно часто задаваемым вопросам XStream , это возможно.Однако класс Test, имеющий вложенный статический класс, не похож на сериализацию данных.

    public static class TestInner
    {
        public static String param1;
        public static String param2;

        public static String getParam1()
        {
            return param1;
        }

        public static void setParam1(final String param1)
        {
            TestInner.param1 = param1;
        }

        public static String getParam2()
        {
            return param2;
        }

        public static void setParam2(final String param2)
        {
            TestInner.param2 = param2;
        }

    }


        final XStream xstream = new XStream();
        final TestInner inner = new Test.TestInner();
        inner.setParam1("valueparam1");
        inner.setParam2("valueparam2");
        logger.info("{}", xstream.toXML(inner));

Выход,

<test.Test_-TestInner/> 

Это известное поведение или ограничение XStream?

1 Ответ

0 голосов
/ 13 февраля 2019

Протестировано с использованием учебника по Xstream (что очень похоже на код, который вы дали) и работает [ разница между вашим кодом и моим в том, что мои переменные не являются статическими ]и я думаю, что это причина.Использовал также следующую зависимость

package com.stackoverflow;
public class TestRunnerOuter {
 public static class TestRunner{
    private String name;
    public TestRunner() {}
    public TestRunner(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
 }
}

, а затем ->

XStream xstream = new XStream();
TestRunner inner = new TestRunnerOuter.TestRunner();
inner.setName("Test");
System.out.println(xstream.toXML(inner));

зависимость ->

<dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.11.1</version>
</dependency>

output ->

    <com.stackoverflow.TestRunnerOuter_-TestRunner>
      <name>Test</name>
    </com.stackoverflow.TestRunnerOuter_-TestRunner>
...