Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Fix deserialization of PropertiesCollection#23

Open
henryju wants to merge 1 commit intomicrosoft:masterfrom
SonarSource:fix_properties_collection
Open

Fix deserialization of PropertiesCollection#23
henryju wants to merge 1 commit intomicrosoft:masterfrom
SonarSource:fix_properties_collection

Conversation

@henryju
Copy link

@henryju henryju commented Feb 21, 2018

Creating a CommentThread and passing some custom properties works fine, but reading them back fails with:

gitHttpClient.getThreads(PROJECT_NAME, REPO_NAME, PR_ID, null, null);

Exception in thread "main" javax.ws.rs.ProcessingException: Error reading entity from input stream.
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:889)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:834)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:363)
at org.glassfish.jersey.client.InboundJaxrsResponse$2.call(InboundJaxrsResponse.java:126)
at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
at org.glassfish.jersey.internal.Errors.process(Errors.java:229)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:389)
at org.glassfish.jersey.client.InboundJaxrsResponse.runInScopeIfPossible(InboundJaxrsResponse.java:264)
at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:123)
at com.microsoft.alm.client.DefaultRestClientHandler$JaxRsResponse.readEntity(DefaultRestClientHandler.java:231)
at com.microsoft.alm.client.VssHttpClientBase.sendRequest(VssHttpClientBase.java:224)
at com.microsoft.alm.teamfoundation.sourcecontrol.webapi.GitHttpClientBase.getThreads(GitHttpClientBase.java:13726)
at main.Main2.main(Main2.java:59)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@6ca8564a; line: 1, column: 1349] (through reference chain: com.microsoft.alm.visualstudio.services.webapi.VssJsonCollectionWrapper["value"]->com.microsoft.alm.teamfoundation.sourcecontrol.webapi.GitPullRequestCommentThread["properties"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:749)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:449)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:311)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:538)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:232)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:206)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:538)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3023)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1676)
at com.microsoft.alm.client.jaxrs.ApiResourceEntityProvider.readFrom(ApiResourceEntityProvider.java:133)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:257)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:236)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:156)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1091)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
... 13 more

This is because PropertiesCollection is a Map<String, String>, while in JSON the format looks like:

"properties": {
    "Microsoft.TeamFoundation.Discussion.SupportsMarkdown": {
        "$type": "System.Int32",
        "$value": 1
    },
    "Microsoft.TeamFoundation.Discussion.UniqueID": {
        "$type": "System.String",
        "$value": "399262e6-9180-4dcc-ae97-9586798328a9"
    }
}

I have added a custom deserializer to fix the issue.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant