gerbil
gerbil copied to clipboard
[QA] JSON response of a system is not allowed to have any additional information
Problem
When a system sends any additional information, the JSON parser of GERBIL QA is configured to abort the parsing process. This may lead to additional development effort on the system side to remove additional information.
An example is the following response
{"questions": [{"id": "1", "question": [{"language": "en", "string": "What is the alma mater of the chancellor of Germany Angela Merkel?"}], "query": {"sparql": "SELECT ?Almamater WHERE { <http://dbpedia.org/resource/Angela_Merkel> <http://dbpedia.org/ontology/almaMater> ?Almamater }"}, "answers": [{"head": {"link": [], "vars": ["Almamater"]}, "results":
{"distinct": false,
"ordered": true,
"bindings": [{"Almamater": {"type": "uri", "value": "http://dbpedia.org/resource/Leipzig_University"}}, {"Almamater": {"type": "uri", "value": "http://dbpedia.org/resource/German_Academy_of_Sciences_at_Berlin"}}]}}]}]}
It causes the following exception
2022-02-10 12:42:41,996 [pool-35-thread-17] ERROR [org.aksw.gerbil.annotator.decorator.ErrorCountingAnnotatorDecorator] - <Got an Exception from the annotator ExampleAnnotator>
org.aksw.gerbil.exceptions.GerbilException: Couldn't parse the response.
at org.aksw.gerbil.annotator.impl.qa.ExtendedQALDBasedWebService.answerQuestion(ExtendedQALDBasedWebService.java:123) ~[classes/:?]
at org.aksw.gerbil.annotator.decorator.TimeMeasuringAnnotatorDecorator.performQATask(TimeMeasuringAnnotatorDecorator.java:276) ~[classes/:?]
at org.aksw.gerbil.annotator.decorator.TimeMeasuringAnnotatorDecorator$TimeMeasuringQASystem.answerQuestion(TimeMeasuringAnnotatorDecorator.java:205) ~[classes/:?]
at org.aksw.gerbil.annotator.decorator.ErrorCountingAnnotatorDecorator.performQATask(ErrorCountingAnnotatorDecorator.java:401) [classes/:?]
at org.aksw.gerbil.annotator.decorator.ErrorCountingAnnotatorDecorator$ErrorCountingQASystem.answerQuestion(ErrorCountingAnnotatorDecorator.java:213) [classes/:?]
at org.aksw.gerbil.annotator.decorator.SingleInstanceSecuringAnnotatorDecorator.performQATask(SingleInstanceSecuringAnnotatorDecorator.java:352) [classes/:?]
at org.aksw.gerbil.annotator.decorator.SingleInstanceSecuringAnnotatorDecorator$SingleInstanceSecuringQASystem.answerQuestion(SingleInstanceSecuringAnnotatorDecorator.java:211) [classes/:?]
at org.aksw.gerbil.execute.ExperimentTask.runExperiment(ExperimentTask.java:530) [classes/:?]
at org.aksw.gerbil.execute.ExperimentTask.run(ExperimentTask.java:167) [classes/:?]
at org.aksw.simba.topicmodeling.concurrent.workers.WorkerImpl.run(WorkerImpl.java:44) [topicmodeling.concurrent-0.0.2-SNAPSHOT.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_191]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_191]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "distinct" (class org.aksw.qa.commons.load.json.EJResults), not marked as ignorable (one known property: "bindings"])
at [Source: (ByteArrayInputStream); line: 1, column: 298] (through reference chain: org.aksw.qa.commons.load.json.QaldJson["questions"]->java.util.Vector[0]->org.aksw.qa.commons.load.json.QaldQuestionEntry["answers"]->java.util.Vector[0]->org.aksw.qa.commons.load.json.EJAnswers["results"]->org.aksw.qa.commons.load.json.EJResults["distinct"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:823) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1153) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1589) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1567) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:286) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:286) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4014) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3071) ~[jackson-databind-2.9.10.5.jar:2.9.10.5]
at org.aksw.qa.commons.load.json.ExtendedQALDJSONLoader.readJson(ExtendedQALDJSONLoader.java:115) ~[commons-0.4.22.jar:0.4.22]
at org.aksw.gerbil.annotator.impl.qa.ExtendedQALDBasedWebService.answerQuestion(ExtendedQALDBasedWebService.java:110) ~[classes/:?]
... 12 more
Solution
The parser should be allowed to ignore key-value pairs that it can not match.