Skip to content

Commit a50df82

Browse files
authored
Add custom serializer for query options (#289)
WebOrb deserializes null Integer as 0, which disables autoload. As a workaround, we can exclude relationsDepth param from request when it is null, effectively making it null on server after dezerialization
1 parent 2f6364c commit a50df82

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

src/com/backendless/Backendless.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,21 @@
2828
import com.backendless.io.BackendlessUserWriter;
2929
import com.backendless.io.DoubleWriter;
3030
import com.backendless.persistence.BackendlessSerializer;
31+
import com.backendless.persistence.QueryOptions;
3132
import com.backendless.persistence.RealmSerializer;
3233
import com.backendless.persistence.local.UserIdStorageFactory;
3334
import com.backendless.persistence.local.UserTokenStorageFactory;
35+
import weborb.ORBConstants;
3436
import weborb.config.ORBConfig;
3537
import weborb.util.ObjectFactories;
3638
import weborb.util.log.ILoggingConstants;
3739
import weborb.util.log.Log;
40+
import weborb.writer.IProtocolFormatter;
41+
import weborb.writer.ITypeWriter;
3842
import weborb.writer.MessageWriter;
43+
import weborb.writer.amf.AmfV3Formatter;
3944

45+
import java.io.IOException;
4046
import java.util.HashMap;
4147
import java.util.Map;
4248

@@ -91,6 +97,29 @@ public static boolean isAndroid()
9197
prefs = BackendlessPrefsFactory.create( isAndroid() );
9298
if( isAndroid )
9399
Media = com.backendless.Media.getInstance();
100+
101+
AmfV3Formatter.AddTypeWriter( QueryOptions.class, new ITypeWriter()
102+
{
103+
@Override
104+
public void write( Object o, IProtocolFormatter iProtocolFormatter ) throws IOException
105+
{
106+
QueryOptions queryOptions = (QueryOptions) o;
107+
Map<String, Object> queryOptionsMap = new HashMap<>( );
108+
queryOptionsMap.put( ORBConstants.WEBORB_TYPE_NAME.toString(), QueryOptions.class.getSimpleName() );
109+
queryOptionsMap.put( "sortBy", queryOptions.getSortBy() );
110+
queryOptionsMap.put( "related", queryOptions.getRelated() );
111+
if( queryOptions.getRelationsDepth() != null )
112+
queryOptionsMap.put( "relationsDepth", queryOptions.getRelationsDepth() );
113+
114+
MessageWriter.writeObject( queryOptionsMap, iProtocolFormatter );
115+
}
116+
117+
@Override
118+
public boolean isReferenceableType()
119+
{
120+
return false;
121+
}
122+
} );
94123
}
95124

96125
/**

0 commit comments

Comments
 (0)