gerbil icon indicating copy to clipboard operation
gerbil copied to clipboard

[QA] JSON response of a system is not allowed to have any additional information

Open MichaelRoeder opened this issue 4 years ago • 0 comments

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.

MichaelRoeder avatar Feb 10 '22 12:02 MichaelRoeder