Arquisoft / InciDashboard_e3b

InciDashboard_e3b
The Unlicense
0 stars 1 forks source link

BUG: org.json.JSONException: JSONObject["kind"] not found. #27

Closed kilianpg closed 6 years ago

kilianpg commented 6 years ago

Al enviar la incidencia de muestra al servicio REST de InciManager:

curl -i -X POST  -H "Content-type: application/json;charset=UTF-8" \
     -d @./src/main/resources/example-incidence.json \
     http://localhost:8091/addIncidence

InciDashboard devuelve la siguiente excepción al intentar procesarla:

[...]

incimanager_e3b [a0211fe7ce5f] |2018-05-26 16:40:40.379  INFO 1 --- [nio-8091-exec-5] e.u.a.e.i.i.services.IncidenceService    : Sending incidence "Incidencia de prueba" to topic 'incidences'
incimanager_e3b [a0211fe7ce5f] |2018-05-26 16:40:40.503  INFO 1 --- [ad | producer-4] e.u.a.e.i.kafka.producers.KafkaProducer  : Success on sending message "{"username":"paco@gmail.com","password":"123456","incidenceName":"Incidencia de prueba","description":"Descripción de la incidencia de prueba","location":"43.3582617,-5.8531647","labels":["prueba","sensor"],"status":"ABIERTA","expiration":"Mar 24, 2018 11:00:00 PM","cacheable":true}" to topic incidences
incidashboard_e3b [d9a3c8f18935] |2018-05-26 16:40:40.539  INFO 1 --- [afka-listener-1] e.u.a.e.i.listeners.IncidenceListener    : New incidence received: "{"username":"paco@gmail.com","password":"123456","incidenceName":"Incidencia de prueba","description":"Descripción de la incidencia de prueba","location":"43.3582617,-5.8531647","labels":["prueba","sensor"],"status":"ABIERTA","expiration":"Mar 24, 2018 11:00:00 PM","cacheable":true}" on topic 'incidences'
incidashboard_e3b [d9a3c8f18935] |2018-05-26 16:40:40.611 ERROR 1 --- [afka-listener-1] o.s.kafka.listener.LoggingErrorHandler   : Error while processing: ConsumerRecord(topic = incidences, partition = 0, offset = 1, key = null, value = {"username":"paco@gmail.com","password":"123456","incidenceName":"Incidencia de prueba","description":"Descripción de la incidencia de prueba","location":"43.3582617,-5.8531647","labels":["prueba","sensor"],"status":"ABIERTA","expiration":"Mar 24, 2018 11:00:00 PM","cacheable":true})
incidashboard_e3b [d9a3c8f18935] |
incidashboard_e3b [d9a3c8f18935] |org.springframework.kafka.listener.ListenerExecutionFailedException: Listener method 'public void es.uniovi.asw.e3b.incidashboard_e3b.listeners.IncidenceListener.listen(java.lang.String)' threw exception; nested exception is org.json.JSONException: JSONObject["kind"] not found.
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:131) ~[spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:101) ~[spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:597) [spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.access$1800(KafkaMessageListenerContainer.java:222) [spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer$ListenerInvoker.run(KafkaMessageListenerContainer.java:772) [spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |      at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |Caused by: org.json.JSONException: JSONObject["kind"] not found.
incidashboard_e3b [d9a3c8f18935] |      at org.json.JSONObject.get(JSONObject.java:473) ~[json-20140107.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at org.json.JSONObject.getString(JSONObject.java:654) ~[json-20140107.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at es.uniovi.asw.e3b.incidashboard_e3b.util.ParserJsonToIncidence.JsonToIncidence(ParserJsonToIncidence.java:26) ~[classes!/:0.0.1-SNAPSHOT]
incidashboard_e3b [d9a3c8f18935] |      at es.uniovi.asw.e3b.incidashboard_e3b.listeners.IncidenceListener.listen(IncidenceListener.java:36) ~[classes!/:0.0.1-SNAPSHOT]
incidashboard_e3b [d9a3c8f18935] |      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |      at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:180) ~[spring-messaging-4.3.9.RELEASE.jar!/:4.3.9.RELEASE]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:112) ~[spring-messaging-4.3.9.RELEASE.jar!/:4.3.9.RELEASE]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:48) ~[spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-kafka-1.0.5.RELEASE.jar!/:na]
incidashboard_e3b [d9a3c8f18935] |      ... 7 common frames omitted
incidashboard_e3b [d9a3c8f18935] |

[...]
kilianpg commented 6 years ago

Para resolver el problema quizás sea mas sencillo adaptar la función JsonToIncidence para configurar en el fichero KafkaListenerFactory.java las funciones para la deserialización de los mensajes en formato JSON, tal y como se explica en el apartado Serialization/Deserialization and Message Conversion de la documentación oficial de Spring Kafka.

Referencias:

kilianpg commented 6 years ago

Ver también: Issue Arquisoft/InciManager_e3b#57

miguelms95 commented 6 years ago

Diría que esto ya está, controlar que los campos estén en la incidencia recibida... ¿no?

ManuelJunco commented 6 years ago

En principio ya estaría. Y hay un test que utiliza la incidencia de muestra para probar el funcionamiento del parser. Principalmente para comprobar que se crean bien las incidencias recibidas en Json

miguelms95 commented 6 years ago

Si esto ya está, lo cierro. Todo eso está controlado con los ifs, así que no debería dar null pointer