在 Android 的改造中集成简单 XML 转换器时出现问题

Issues while integrating Simple XML converter in retrofit for Android

我在为 Android 改造时集成简单 XML 转换器时遇到了几个问题。
1).在 build.gradle.

中添加 "compile ('com.squareup.retrofit:converter-simplexml:1.9.0')" 后出现编译错误

错误报告: Information:Gradle 任务 [:app:assembleDebug] Warning:Dependency xpp3:xpp3:1.1.3.3 被调试忽略,因为它可能与 Android 提供的内部版本冲突。 如有问题,请用jarjar重新打包,更改class包 Warning:Dependency xpp3:xpp3:1.1.3.3 被忽略发布,因为它可能与 Android 提供的内部版本冲突。 如有问题,请用 jarjar 重新打包以更改 class 包

2).我通过提供 root class 名称在这个 http://pojo.sodhanalibrary.com/Convert 的帮助下创建了 Java 模式。而且我不断为一个或另一个元素获取 InstantiateException 或 ElementException 并且 mazorly retrofit.converter.ConversionException: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=description, required=true, type =void) 在字段 "description" 上。许多字段出现相同的错误。

问题 1).
我不得不在我的 build.gradle 中添加以下内容。由于这些软件包已经包含 Android,因此存在问题。

compile ('com.squareup.retrofit:converter-simplexml:1.9.0') {
        exclude group: 'xpp3', module: 'xpp3'
        exclude group: 'stax', module: 'stax-api'
        exclude group: 'stax', module: 'stax'
    }

问题 2).
我必须拥有 Java class 层次结构,该层次结构应以 XML 中的第一个元素开始。 我的 XML 中的第一个元素是 "Rss"。当我使用 http://pojo.sodhanalibrary.com/Convert 生成模式时,我给了自己的名字,例如 "Warnings",它为所有必需的元素生成了 classes。 Warnings.java 有 "Rss" 个实例成员。我没有传递 Rss,而是将警告传递给 retrofit.Callback。

Class Warnings {
   private Rss rss;
   .....
   .....
}  

Class Rss {
   private Channel channel;
   .....
   .....
}  

它可以在某种程度上找到 classes 的层次结构,但它开始为所有 classes 的每个字段提供有问题的 errors/exceptions,尽管它们似乎可用。
在花费大量时间解决这些错误后,我将传递给 retrofit.Callback 的响应 class 从警告更改为 Rss,并且有效。

XML:

<rss version="2.0">
<channel>...</channel>
</rss>

这是我的改造请求代码,但有错误:

retrofitService.getWarnings(lat, lon, authKey, new Callback<Warnings>() {
            @Override
            public void success(WarningsResponse warningsResponse, Response response) {
            // handle success response..
            }

            @Override
            public void failure(RetrofitError error) {
            // handle error response
              }
        });

工作代码:

retrofitService.getWarnings(lat, lon, authKey, new Callback<Rss>() {
            @Override
            public void success(WarningsResponse warningsResponse, Response response) {
            // handle success response..
            }

            @Override
            public void failure(RetrofitError error) {
            // handle error response
              }
        });

唯一的区别是 class 传递给回调。

因此,使用 XML 中根元素的 class 名称传递给回调,这样 XML 到 Java 对象的转换就很容易成功。

您可以在 XML 与 Retrofit 帮助站点的集成中找到此讨论:
https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter/

Just in case if someone is looking for a resolution in maven then it will be 
done as follows - 

<dependency>
    <groupId>com.squareup.retrofit</groupId                      
    <artifactId>converter-simplexml</artifactId>
    <version>${converter-simplexml.version}</version>
    <exclusions>
        <exclusion>
            <groupId>stax</groupId>
            <artifactId>stax</artifactId>
        </exclusion>
    </exclusions>
</dependency>