Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

578
Vistas
Serializando la respuesta retrofit xml con SimpleXML en kotlin

Estoy intentando serializar una respuesta xml de actualización en un objeto usando SimpleXML.

Sin embargo, se produce la siguiente excepción:

org.simpleframework.xml.core.ValueRequiredException: No se puede satisfacer @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, name=ALLFile, required=true, type=void) en campo 'archivos'

Ejemplo de respuesta:

 <LIST> <ALLFile> <File> <NAME>SOME FILE NAME</NAME> <FPATH>SOME FILE PATH</FPATH> <SIZE>160053622</SIZE> <TIMECODE>1299673239</TIMECODE> <TIME>2018/11/23 14:04:46</TIME> <ATTR>33</ATTR> </File> </ALLFile> <ALLFile> <File> <NAME>SOME FILE NAME</NAME> <FPATH>SOME FILE PATH</FPATH> <SIZE>160053622</SIZE> <TIMECODE>1299673559</TIMECODE> <TIME>2018/11/23 14:14:46</TIME> <ATTR>33</ATTR> </File> </ALLFile> </LIST>

Objetos:

 @Root(name = "LIST", strict = false) data class ListResponse @JvmOverloads constructor( @field:ElementList(name = "ALLFile", inline = true) var files: List<GetVideosResponse>? = null ) @Root(strict = false, name = "File") data class GetVideosResponse @JvmOverloads constructor( @field:Element(name = "NAME", required = false) var name: String? = null, @field:Element(name = "FPATH", required = false) var fPath: String? = null, @field:Element(name = "SIZE", required = false) var size: Int? = null, @field:Element(name = "TIMECODE", required = false) var timeCode: Long? = null, @field:Element(name = "TIME", required = false) var time: String? = null, @field:Element(name = "ATTR", required = false) var attr: Int? = null)

Recibo una respuesta 200 del servidor, por lo que puedo descartar la lógica de mi solicitud como el problema. Lo que me lleva a creer que el problema radica en serializar los objetos, ¿alguna idea?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Encontré una forma de evitar esto, no necesariamente la respuesta, pero funciona para mí ...

Tomé la respuesta XML como una cadena, la convertí a JSON y luego usé mi biblioteca de serialización JSON habitual ( moshi ) para serializar el JSON en un objeto.

 private fun parseXmlToJsonObject(xml: String) : String { var jsonObj: JSONObject? = null try { jsonObj = XML.toJSONObject(xml) } catch (e: JSONException) { Log.e("JSON exception", e.message) e.printStackTrace() } return jsonObj.toString() } fun<T> parseResponse(xml: String, clazz: Class<T>) : T { try { return initializeMoshi().adapter(clazz).fromJson(parseXmlToJsonObject(xml))!! }catch (e: IOException){ throw IllegalArgumentException("Could not deserialize: $xml into class: $clazz") } } private fun initializeMoshi(): Moshi { return Moshi.Builder() .add(KotlinJsonAdapterFactory()) .build() }

Y lo llamó así:

 val myObject = parseResponse(response.body()!!.string(), MyJsonClass::class.java)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda