마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

retrofit2에서 converter-simplexml를 사용하여 xml 파싱중 질문입니다.

0 추천
retrofit2를 사용하고, adapter로 converter-simplexml를 추가하여 xml을 파싱 하고 있습니다.

기존에 개발시(디버그 모드)에는 큰 문제가 없었는데요, 배포 시 proguard를 적용하였더니

API호출후, okhttp log를 통해 xml 값이 log에 찍힙니다만, 가져온 xml을 파싱을 못하는것 같습니다.

xml의 값을 파싱하여 model에 담아 액티비티로 전달하는데 model의 값이 null입니다.

디버그에서는 문제 없이 되는게, proguard에서 난독화 할때 문제인것 같다고 추측은 됩니다만, 잘모르겠어서 질문 남깁니다.
뱅구다 (11,280 포인트) 님이 2019년 6월 27일 질문
뱅구다님이 2019년 6월 27일 수정
model class를 난독화에서 제외시켜보는건 어떤가요
-keep class com.package.data.* 인가 그럴거에요
답변 감사합니다. model을 난독화에서 제외 시키는건 했습니다.

처음에 model이 있는 부분을 같이 난독화 했더니, 파싱 하는 부분까지도 안가더라구요. 그래서 model부분을 난독화를 제외시킨후에 실행을 했더니, 위에 질문같은 현상이 발생을 하더라구요. 아 그리고 제가 본문에 글을 잘못썼네요. nullpointerexception이 발생하진 않습니다. 그냥 model부분이 null입니다.
파싱이 대상이되는 entity class 도 제외 시켜보세요
저는 보통 entity 에 Serializable 을 상속하고 Serializable 를 상속하는 모든 클래스에 예외처리를 주는 형태로 진행 합니다.
말씀해주신 방법으로 해보았는데도, 동일하네요. 그런데 궁금한점이 있는데요. API를 Json방식으로 호출해서 받아오면 위와같은 문제가 발생하지 않습니다. 단지 retrofit2의 simplexml adapter를 추가해서 xml로 받아올 때만 본문과 같은 현상이 발생합니다.

예) http://xxxxxxxx?type=json 으로 호출하면 문제 없음
http://xxxxxxxx?type=xml 같은 API에 return type을 xml로 호출해서 받아오는 방식이 xml인 경우에만 발생함
아..
addConverterFactory 를 xml 과 json 을 구분해서 넣어보세요
retrofit builder를 json용 한개, xml용 한개 해서 총 2개를 만들어서 사용중입니다.

1.new Retrofit.Builder()
                .baseUrl(server_url)
                .client(createOkHttpClient())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build()
                .create(RetrofitController.class);

2.new Retrofit.Builder()
                .baseUrl(server_url)
                .client(createOkHttpClient())
                .addConverterFactory(SimpleXmlConverterFactory.create()) // XML
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build()
                .create(RetrofitController.class);
흐흠 -_ - ㅋ
proguard 시에만 문제 존재 라는걸 잠시 잊었군요 ;;

결론적으로는 예외처리가 안된것인데 오류 exception 로그를 올려보세요
답변 감사합니다.
현재 본문과 다른 질문인데요.
제가 API를 받아오는곳이 공공데이터 포털인데, 일반적으로 Json형식으로 받아오는게 문제는 없습니다. 그런데, 1일 사용량 요청 초과라던지 exception이 발생하는 경우 returnType을 json으로 요청해도 xml형식으로 날라오더라구요. 이런경우 어떤식으로 처리를 하면 좋을까요?
1. api key 를 여러개 할당 받아서 client 에서 키를 돌아가면서 사용하는 식으로 해서 1일 사용량 초과를 피해가세요 (또는 트레픽이 많은 경우 별도로 계정 주는 게 있었던 걸로 기억 됩니다.)

2. 공공데이터는 아직 xml 형태가 많아서 그냥 xml 로 사용하는게 더 나을듯 싶네요

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...