NoSuchMethod:org.codehaus.stax2.ri.EmptyIterator.getInstance()Ljava/util/Iterator;
没有直接使用stax2-api的jar包,是通过maven依赖管理引入的,执行如下代码时抛出如上异常:
interface MyApi {
@GET("aaa/bbb/ccc")
Call<Ccc> getCcc();
}
MyApi myApi;
try {
// initialize OkHttpClient
OkHttpClient client = ......;
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://" + ip)
.addConverterFactory(SimpleXmlConverterFactory.create()).client(client).build();
myApi= retrofit.create(MyApi .class);
if (myApi.getCcc().execute().isSuccessful())
.....
在执行myApi.getCcc().execute()时抛出如上异常。
通过堆栈可以看到调用情况如下:
public final class DataUtil {
......
public static <T> Iterator<T> emptyIterator() {
return EmptyIterator.getInstance();
}
......
}
public final class EmptyIterator implements Iterator<Object> {
static final EmptyIterator sInstance = new EmptyIterator();
private EmptyIterator() {
}
public static EmptyIterator getInstance() {
return sInstance;
}
......
}
可以看到应该是代码不匹配,要求的返回是 Iterator,实际返回的是EmptyIterator
查找maven库发现EmptyIterator是在stax2-api中定义的,有两个版本:3.1.4和 4.1,3.1.4版本实现如上,4.1版本实现如下:
public final class EmptyIterator implements Iterator<Object> {
static final Iterator<?> sInstance = new EmptyIterator();
private EmptyIterator() {
}
public static <T> Iterator<T> getInstance() {
return sInstance;
}
......
}
由此可以判断是stax-api版本不匹配的问题,在maven中配置依赖4.1版本问题解决。