Good morning,
I have a problem with convert from xml to data (unmarshall) when I use xml which has unknown tags. Xstream write me Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field. I was looking for solution for my problem on internet. I find some it but all of them do not working on my case.

I override method wrapMapper but it still no working.

XStream xstream = new XStream() {

            // to enable ignoring of unknown elements

            @Override

            protected MapperWrapper wrapMapper(MapperWrapper next) {

                return new MapperWrapper(next) {

                    @Override

                    public boolean shouldSerializeMember(Class definedIn, 
String fieldName) {

                        if (definedIn == Object.class) {

                            try {

                                return this.realClass(fieldName) != null;

                            } catch (Exception e) {

                                return false;

                            }

                        }

                        return super.shouldSerializeMember(definedIn, 
fieldName);

                    }

                };

            }

        };



Is it maybe because I have a collection at class. But every options which I try not works.

My class which I need convert to/from  is

public class Configurations implements Serializable{

    private static final long serialVersionUID = 4392719277296957995L;

    private List<Class<? extends Updatable>> tableNames;

    private Map<Class<? extends Updatable>, List<? extends Updatable>> tables;

    ...

    }


Updatable is only interface. I need convert to/from xml every class which implements this interface.

In normal case, when I has right xml (get from marshell data) it is ok. I can convert data to this xml and xml back to data.

<mypackage.Configurations>

  <tableNames>

    <java-class>mypackage.configuration.MyClass</java-class>

  </tableNames>

  <tables>

    <entry>

      <java-class>mypackage.configuration.MyClass</java-class>

      <list>

        <mypackage.configuration.MyClass>

          <id>0</id>

          <created>2014-09-19 08:49:34.649 UTC</created>

          <active>true</active>

        </mypackage.configuration.MyClass>

      </list>

    </entry>

  </tables>

</mypackage.Configurations>


But when I change xml (forr example add new tag newTag)

<mypackage.Configurations>

  <tableNames>

    <java-class>mypackage.configuration.MyClass</java-class>

  </tableNames>

  <tables>

    <entry>

      <java-class>mypackage.configuration.MyClass</java-class>

      <list>

        <mypackage.configuration.MyClass>

          <id>0</id>

          <created>2014-09-19 08:49:34.649 UTC</created>

          <active>true</active>

          <newTag>exam</newTag>

        </mypackage.configuration.MyClass>

      </list>

    </entry>

  </tables>

</mypackage.Configurations>


Xstream ends with error AbstractReflectionConverter$UnknownFieldException: No such field. Is exists solution how can I solve this problem? I need convert to data (class) and if xml has unknown tags which does not exist at class, logg some message and skip tag.

Thank you for your answer.


Best Regards
Petr





Reply via email to