From ae49f5352a14180cec9c1d287486f1d59ef2c71a Mon Sep 17 00:00:00 2001 From: Simon Convent <simon.convent@grandcentrix.net> Date: Thu, 4 Apr 2024 16:05:23 +0200 Subject: [PATCH] Add JacksonRegistrationUpdateSerializer to fix serialization issue --- .../server/demo/servlet/EventServlet.java | 4 +- .../JacksonRegistrationUpdateSerializer.java | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/JacksonRegistrationUpdateSerializer.java diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/EventServlet.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/EventServlet.java index 5ce76d6eba..7b0c617e28 100644 --- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/EventServlet.java +++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/EventServlet.java @@ -45,6 +45,7 @@ import org.eclipse.leshan.server.demo.servlet.json.JacksonLinkSerializer; import org.eclipse.leshan.server.demo.servlet.json.JacksonLwM2mNodeSerializer; import org.eclipse.leshan.server.demo.servlet.json.JacksonRegistrationSerializer; +import org.eclipse.leshan.server.demo.servlet.json.JacksonRegistrationUpdateSerializer; import org.eclipse.leshan.server.demo.servlet.json.JacksonVersionSerializer; import org.eclipse.leshan.server.demo.servlet.log.CoapMessage; import org.eclipse.leshan.server.demo.servlet.log.CoapMessageListener; @@ -302,8 +303,7 @@ public EventServlet(LeshanServer server) { SimpleModule module = new SimpleModule(); module.addSerializer(Link.class, new JacksonLinkSerializer()); module.addSerializer(Registration.class, new JacksonRegistrationSerializer(server.getPresenceService())); - // TODO like we have a dedicated serializer for Registration, we maybe need one for RegistrationUpdate - // needed for : registrationListener.updated(RegistrationUpdate, Registration, Registration) + module.addSerializer(RegistrationUpdate.class, new JacksonRegistrationUpdateSerializer()); module.addSerializer(LwM2mNode.class, new JacksonLwM2mNodeSerializer()); module.addSerializer(Version.class, new JacksonVersionSerializer()); mapper.registerModule(module); diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/JacksonRegistrationUpdateSerializer.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/JacksonRegistrationUpdateSerializer.java new file mode 100644 index 0000000000..43ce7a3c89 --- /dev/null +++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/JacksonRegistrationUpdateSerializer.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2024 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Simon Convent - initial API and implementation + *******************************************************************************/ +package org.eclipse.leshan.server.demo.servlet.json; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.eclipse.leshan.core.peer.OscoreIdentity; +import org.eclipse.leshan.server.registration.RegistrationUpdate; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class JacksonRegistrationUpdateSerializer extends StdSerializer<RegistrationUpdate> { + + private static final long serialVersionUID = -2828961931685566265L; + + protected JacksonRegistrationUpdateSerializer(Class<RegistrationUpdate> t) { + super(t); + } + + public JacksonRegistrationUpdateSerializer() { + this(null); + } + + @Override + public void serialize(RegistrationUpdate src, JsonGenerator gen, SerializerProvider provider) throws IOException { + Map<String, Object> map = new LinkedHashMap<>(); + + map.put("registrationId", src.getRegistrationId()); + + map.put("address", src.getAddress().getHostAddress() + ":" + src.getPort()); + map.put("smsNumber", src.getSmsNumber()); + map.put("lifetime", src.getLifeTimeInSec()); + + map.put("alternatePath", src.getAlternatePath()); + map.put("objectLinks", src.getObjectLinks()); + // TODO secure means over TLS (not OSCORE) but this is not clear so maybe we need to change this. + map.put("secure", src.getClientTransportData().getIdentity().isSecure() + && !(src.getClientTransportData().getIdentity() instanceof OscoreIdentity)); + map.put("additionalAttributes", src.getAdditionalAttributes()); + + gen.writeObject(map); + } +}