Как отладить java.lang.IllegalArgumentException: невозможно создать конвертер для java.util.List в Retrofit2 converter-simplexml?

Я использую retrofit2 для сетевых вызовов и retrofit2 converter-simplexml в качестве конвертера для синтаксического анализа XML. Есть новостной сайт: http://www.cbc.ca/cmlink/rss-topstories/ с RSS-потоком. Не могу исправить ошибку.

java.lang.IllegalArgumentException: Unable to create converter for java.util.List<com.ku4irka.rss_nfr.model.entity.Channel>
                                                                     for method ChannelService.getChannel
                                                                     at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:720)
                                                                     at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:706)
                                                                     at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:167)
                                                                     at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
                                                                     at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
                                                                     at java.lang.reflect.Proxy.invoke(Proxy.java:397)
                                                                     at $Proxy0.getChannel(Unknown Source)
                                                                     at com.ku4irka.rss_nfr.view.activity.ListNewsActivity.configRest(ListNewsActivity.java:48)
                                                                     at com.ku4irka.rss_nfr.view.activity.ListNewsActivity.onCreate(ListNewsActivity.java:36)
                                                                     at android.app.Activity.performCreate(Activity.java:5958)
                                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
                                                                        ... 10 more
                                                                  Caused by: java.lang.IllegalArgumentException: Could not locate ResponseBody converter for java.util.List<com.ku4irka.rss_nfr.model.entity.Channel>.
                                                                   Tried:
                                                                    * retrofit2.BuiltInConverters
                                                                    * retrofit2.converter.simplexml.SimpleXmlConverterFactory
                                                                     at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:346)
                                                                     at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:308)
                                                                     at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:704)
                                                                        ... 20 more

Пример кода:

RestManager:

public class RestManager {

private static final OkHttpClient CLIENT = new OkHttpClient();

private static Retrofit retrofit;

private static ChannelService sChannelService;

private static void retrofitSetup() {
    // Retrofit setup
    retrofit = new Retrofit.Builder()
            .baseUrl(Constans.HTTP.BASE_URL)
            .addConverterFactory(SimpleXmlConverterFactory.create())
            .client(CLIENT)
            .build();
}


public static ChannelService getChannelService() {
    if (sChannelService == null) {

        retrofitSetup();
        // Service setup
        sChannelService = retrofit.create(ChannelService.class);
    }
    return sChannelService;
}
}

Услуга:

public interface ChannelService {
@GET("cmlink/rss-topstories/")
Call<List<Channel>> getChannel();
}

Канал класса:

@Root(name = "channel")
public class Channel {

@Element(name = "guid")
private double id;

@Element(name = "title")
private String title;

@Element(name = "pubDate")
private String pubDate;

@Element(name = "author")
private String author;

@Element(name = "description")
private String description;

@Element(name = "link")
private String link;

public Channel() {
}   

Метод:

private void configRest() {
    Call<List<Channel>> call = mRestManager.getChannelService().getChannel();  
    call.enqueue(new Callback<List<Channel>>() {
        @Override
        public void onResponse(Call<List<Channel>> call, Response<List<Channel>> response) {

            if (response.isSuccessful()) {
                mNewsList = response.body();
                setRecyclerView();
            }
        }
        @Override
        public void onFailure(Call<List<Channel>> call, Throwable t) {
            //
        }
    });
}

Gradle:

configurations {
    compile.exclude group: 'stax'
    compile.exclude group: 'xpp3'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'com.android.support:design:24.1.1'

    compile 'com.android.support:recyclerview-v7:24.1.1'

    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-simplexml:2.1.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'org.simpleframework:simple-xml:2.7.1'

}

Подскажите пожалуйста в чем проблема?


person ku4irka    schedule 15.08.2016    source источник
comment
Можете ли вы проверить свою версию Retrofit и SimpleXmlConverter?   -  person Michael B.    schedule 15.08.2016
comment
Вы смотрели это?   -  person Tibrogargan    schedule 16.08.2016


Ответы (1)


Вероятно, вы используете неправильную версию конвертера с вашей версией Retrofit.

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.0'
compile ('com.squareup.retrofit2:converter-simplexml:2.1.0', {
    exclude module: 'stax'
    exclude module: 'stax-api'
    exclude module: 'xpp3'
})

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(HOST)
            .client(client)
            .addConverterFactory(SimpleXmlConverterFactory.create())
            .build();
    service = retrofit.create(Service.class);
person Michael B.    schedule 15.08.2016
comment
Благодарю вас! В моем файле gradle: `configurations {compile.exclude group: 'stax' compile.exclude group: 'xpp3'} - person ku4irka; 15.08.2016
comment
зависимости {compile fileTree (dir: 'libs', include: ['* .jar']) testCompile 'junit: junit: 4.12' compile 'com.android.support:appcompat-v7:24.1.1' compile 'com.android .support: design: 24.1.1 'compile' com.android.support:recyclerview-v7:24.1.1 'compile' com.squareup.retrofit2: retrofit: 2.1.0 'compile' com.squareup.retrofit2: converter-simplexml : 2.1.0 'compile' com.squareup.picasso: picasso: 2.5.2 'compile' com.squareup.okhttp3: okhttp: 3.3.1 'compile' org.simpleframework: simple-xml: 2.7.1 '} - person ku4irka; 15.08.2016