[ 
https://issues.apache.org/jira/browse/TINKERPOP-2094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16693103#comment-16693103
 ] 

stephen mallette commented on TINKERPOP-2094:
---------------------------------------------

Yeah - gryo isn't known for great serialization errors. You can serialize an 
entire subgraph from a traversal if it is a TinkerGraph, but you have to 
register the {{TinkerIoRegistry}} to gryo on client and server. Should work 
fine then.

> Gremlin Driver Cluster Builder serializer method does not use mimeType as 
> suggested
> -----------------------------------------------------------------------------------
>
>                 Key: TINKERPOP-2094
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2094
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: driver
>    Affects Versions: 3.3.4
>         Environment: Linux
> Java 8
> Kotlin
>            Reporter: Lyndon Armitage
>            Assignee: stephen mallette
>            Priority: Minor
>             Fix For: 3.4.0, 3.3.5
>
>
> Whilst struggling with getting serialization working as expected during 
> testing I noticed that the following method does not work as expected:
> org.apache.tinkerpop.gremlin.driver.Cluster.Builder#serializer(java.lang.String)
> Specifically this code: 
> {code:java}
> /**
>  * Set the {@link MessageSerializer} to use given its MIME type.  Note that 
> setting this value this way
>  * will not allow specific configuration of the serializer itself.  If 
> specific configuration is required
>  * please use {@link #serializer(MessageSerializer)}.
>  */
> public Builder serializer(final String mimeType) {
>     serializer = Serializers.valueOf(mimeType).simpleInstance();
>     return this;
> }
> {code}
> It suggests that the string argument being used should be a MIME type like 
> "application/json" but due to how the method Serializers.valueOf() works it 
> in fact checks the enum name value.
> See the class org.apache.tinkerpop.gremlin.driver.ser.Serializers for some 
> context.
> The valueOf method checks against the name of the enum which for the 
> "appliction/json" example would actually be "GRAPHSON".
> There is a property called value and function called getValue() that were 
> probably the intended targets for matching against.
> A solution for this would be to simply check against each enum instance's 
> value property via the getter method mentioned earlier. Something like this:
> {code:java}
> public Builder serializer(final String mimeType) {
>     for (Serializers serializer : Serializers.values()) {
>         if (serializer.getValue().equals(mimeType)) {
>             this.serializer = serializer.simpleInstance();
>             break;
>         }
>     }
>     return this;
> }
> {code}
> You could extract this (or the matching part of it) into a static method on 
> the Serializers enum type if such a matching pattern is common. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to