Ok, great. We like to turn off some of this Jackson magic as most of the time you don’t really want to expose all fields/getter (unless you have a very strict DTO)
···
On Thu, Jun 16, 2016 at 7:31 PM, Anilkumar Kodi anilkumk@thoughtworks.com wrote:
Hi Morten,
We identified the problem and found solution as below.
Solution :
As you implemented disabling GETTERS and SETTERS in for deserializing, the same way we need to disable while serializing as well.
Thank you so much for your help
Regards,
Anil
–
Morten Olav Hansen
Senior Engineer, DHIS 2
University of Oslo
http://www.dhis2.org
On Thu, Jun 16, 2016 at 5:24 PM, Anilkumar Kodi anilkumk@thoughtworks.com wrote:
Sorry Morten, executeAnonymousEventPush which we build for pushing anonymous event data, When we are getting events(which does not have valid and coordinateString field ) and when we are passing that to to write to request, at the time this payload was building.
Any idea why are we getting those field when we writeValue using ObjectMapper
Here is the code:
Events result = eventService.getEventValuesLastUpdatedAfter( lastSuccessTime );
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue( request.getBody(), result );
OutPut
result = Events{program='null', programInstance='null', events=[Event{event='p6lrkXRw14W', status=ACTIVE, program='YJ4AHPlFTrf', programStage='UpHRvs3KcyL', orgUnit='y2mjbcN29en', trackedEntityInstance='null', eventDate='2016-06-15T18:30:00.000+0000', dueDate='null', storedBy='null', coordinate=Coordinate{latitude=14.093957177836236, longitude=46.175537109375}, dataValues=[DataValue{value='12345', dataElement='YKz99vMMKpg', providedElsewhere=false, storedBy='Srikanth'}], attributeCategoryOptions=xYerKDKCefk, completedBy=null, completedDate=null}]}
After we are mapping we are getting previous payload
On Thu, Jun 16, 2016 at 4:32 PM, Anilkumar Kodi anilkumk@thoughtworks.com wrote:
It got added when we are serializing and sending request in the executeAnonymousEventPush.
On Thu, Jun 16, 2016 at 3:34 PM, Morten Olav Hansen morten@dhis2.org wrote:
Right, but I don’t see why you have valid in the payload to start with? normal event export will not include this
–
Morten Olav Hansen
Senior Engineer, DHIS 2
University of Oslo
http://www.dhis2.org
On Thu, Jun 16, 2016 at 4:52 PM, Anilkumar Kodi anilkumk@thoughtworks.com wrote:
Hi Morten
This is related to the coordinate value itself.
Please see this event payload thats getting posted to /api/events (POST).
{“program”:null,“programInstance”:null,“events”:[{“event”:“tiqYSyQER6a”,“status”:“ACTIVE”,“program”:“MR7cTxF25lM”,“programStage”:“f8hc3X0zYQ7”,“enrollment”:null,“enrollmentStatus”:null,“orgUnit”:“y2mjbcN29en”,“orgUnitName”:null,“trackedEntityInstance”:null,“eventDate”:“2016-06-15T18:30:00.000+0000”,“dueDate”:null,“storedBy”:null,“coordinate”:{“latitude”:16.867633616803847,“longitude”:50.28167724609375,“valid”:true,“coordinateString”:“[50.28167724609375,16.867633616803847]”},“dataValues”:[{“created”:“2016-06-16T06:11:29.707+0000”,“lastUpdated”:“2016-06-16T06:11:29.707+0000”,“value”:“123456789”,“dataElement”:“YKz99vMMKpg”,“providedElsewhere”:false,“storedBy”:“admin”}],“notes”:,“followup”:null,“created”:null,“lastUpdated”:null,“attributeCategoryOptions”:“xYerKDKCefk”,“completedBy”:null,“completedDate”:null,“href”:null}],“metaData”:null,“pager”:null}
And the underlying exception is this:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “valid” (class org.hisp.dhis.dxf2.events.event.Coordinate), not marked as ignorable (2 known properties: “latitude”, “longitude”])
at [Source: {“program”:null,“programInstance”:null,“events”:[{“event”:“tiqYSyQER6a”,“status”:“ACTIVE”,“program”:“MR7cTxF25lM”,“programStage”:“f8hc3X0zYQ7”,“enrollment”:null,“enrollmentStatus”:null,“orgUnit”:“y2mjbcN29en”,“orgUnitName”:null,“trackedEntityInstance”:null,“eventDate”:“2016-06-15T18:30:00.000+0000”,“dueDate”:null,“storedBy”:null,“coordinate”:{“latitude”:16.867633616803847,“longitude”:50.28167724609375,“valid”:true,“coordinateString”:“[50.28167724609375,16.867633616803847]”},“dataValues”:[{“created”:“2016-06-16T06:11:29.707+0000”,“lastUpdated”:“2016-06-16T06:11:29.707+0000”,“value”:“123456789”,“dataElement”:“YKz99vMMKpg”,“providedElsewhere”:false,“storedBy”:“admin”}],“notes”:,“followup”:null,“created”:null,“lastUpdated”:null,“attributeCategoryOptions”:“xYerKDKCefk”,“completedBy”:null,“completedDate”:null,“href”:null}],“metaData”:null,“pager”:null}
; line: 1, column: 418] (through reference chain: org.hisp.dhis.dxf2.events.event.Events[“events”]->java.util.ArrayList[0]->org.hisp.dhis.dxf2.events.event.Event[“coordinate”]->org.hisp.dhis.dxf2.events.event.Coordinate[“valid”])
Please let us know what you think.
Regards
Anil
On Thu, Jun 16, 2016 at 7:30 AM, Morten Olav Hansen morten@dhis2.org wrote:
Hi
Could you show me the payload you are sending? this API is in use by several clients without any issues.
Also, it says Unrecognized field "programInstance"
are you sure this is really related to @JsonIgnore
on the Coordinate
class?
It would be easier to debug if you can share the event you are sending.
–
Morten Olav Hansen
Senior Engineer, DHIS 2
University of Oslo
http://www.dhis2.org
On Wed, Jun 15, 2016 at 7:46 PM, Anilkumar Kodi anilkumk@thoughtworks.com wrote:
Hi Morten,
This is still looking for other 2 properties to map while deserializing, we are getting exception like
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “programInstance” (class org.hisp.dhis.dxf2.events.event.Event), not marked as ignorable (22 known properties: “notes”, “trackedEntityInstance”, “program”, “lastUpdated”, “orgUnit”, “href”, “dataValues”, “status”, “orgUnitName”, “enrollmentStatus”, “coordinate”, “completedDate”, “event”, “dueDate”, “enrollment”, “eventDate”, “followup”, “programStage”, “storedBy”, “created”, “attributeCategoryOptions”, “completedBy”])
at [Source: {“program”:null,“programInstance”:null,“events”:[{“event”:“EcHeh9roBlf”,“status”:“ACTIVE”,“program”:“KKZTIFe5sf5”,“programStage”:“lQgBMyAgzae”,“enrollment”:null,“enrollmentStatus”:null,“orgUnit”:“fxXno3Zm20F”,“orgUnitName”:null,“trackedEntityInstance”:null,“eventDate”:“2016-06-06T18:30:00.000+0000”,“dueDate”:null,“storedBy”:null,“coordinate”:{“latitude”:11.587669416896203,“longitude”:41.66839599609375,“valid”:true,“coordinateString”:“[41.66839599609375,11.587669416896203]”},“dataValues”:[{“created”:“2016-06-14T07:21:30.781+0000”,“lastUpdated”:“2016-06-14T07:21:30.782+0000”,“value”:“7”,“dataElement”:“gKGoK7Vb2yK”,“providedElsewhere”:false,“storedBy”:“Anil”}],“notes”:,“followup”:null,“created”:null,“lastUpdated”:null,“attributeCategoryOptions”:“xYerKDKCefk”,“completedBy”:null,“completedDate”:null,“href”:null}],“metaData”:null,“pager”:null}; line: 1, column: 39] (through reference chain: org.hisp.dhis.dxf2.events.event.Event[“programInstance”])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51)
Although, we see this working when we add @JsonIgnore on getters.
@JsonIgnore
public boolean isValid()
@JsonIgnore
public String getCoordinateString()
Thanks,
Anil
On Wed, Jun 15, 2016 at 10:48 AM, Morten Olav Hansen morten@dhis2.org wrote:
Already done
–
Morten Olav Hansen
Senior Engineer, DHIS 2
University of Oslo
http://www.dhis2.org
On Wed, Jun 15, 2016 at 11:50 AM, Vanya Seth vanyas@thoughtworks.com wrote:
Hi Morten
That would be great. Please let us know when you commit the changes. We ll take a merge from the trunk.
Regards
Vanya
On Wed, Jun 15, 2016 at 9:01 AM, Morten Olav Hansen morten@dhis2.org wrote:
Hi
We usually turn off most of that Jackson auto discovery magic, I see we haven’t done that properly in Jackson*, I will add that now (so it follows JacksonUtils, RenderService etc)
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp
With Regards
ThoughtWorks Technologies
Hyderabad
–Stay Hungry Stay Foolish!!
–
–
Morten Olav Hansen
Senior Engineer, DHIS 2
University of Oslo
http://www.dhis2.org
On Tue, Jun 14, 2016 at 8:41 PM, Anilkumar Kodi anilkumk@thoughtworks.com wrote:
Hi Morten,
We are doing Anonymous Event data push. As part of that we are also sending coordinates.
Coordinate object has 4 public properties which are listed below
@JsonProperty( required = true )
@JacksonXmlProperty( isAttribute = true )
public Double getLatitude()
@JsonProperty( required = true )
@JacksonXmlProperty( isAttribute = true )
public Double getLongitude()
public boolean isValid()
public String getCoordinateString()
We don't have @JsonIgnore/@JsonProperty on the Other 2 properties.
Because of this we are getting Error while Deserializing.
Moreover, the JSON Mapper for the class <JacksonEventService> has configuration FAIL_ON_UNKNOWN_PROPERTIES set to **true**
We have fixed this by adding @JsonIgnore on those properties.
We Would like to know if you see any downstream issues with this minor change.
Thanks,
Anil Kumar & Srikanth