/** * Returns the {@code DataSerializer} for the given class. If no class has been registered, {@code * null} is returned. Remember that it is okay to return {@code null} in this case. This method is * invoked when writing an object. If a serializer isn't available, then its the user's fault. */ private static DataSerializer getSerializer(Class c) { DataSerializer ds = classesToSerializers.get(c.getName()); if (ds == null) { SerializerAttributesHolder sah = supportedClassesToHolders.get(c.getName()); if (sah != null) { Class dsClass = null; try { dsClass = getCachedClass(sah.getClassName()); DataSerializer serializer = register(dsClass, false); dsClassesToHolders.remove(dsClass.getName()); idsToHolders.remove(serializer.getId()); for (Class clazz : serializer.getSupportedClasses()) { supportedClassesToHolders.remove(clazz.getName()); } return serializer; } catch (ClassNotFoundException ignored) { logger.info(LogMarker.SERIALIZER_MARKER, "Could not load DataSerializer class: {}", dsClass); } } } return ds; }
Class dsClass = null; try { dsClass = getCachedClass(sah.getClassName()); dsClassesToHolders.remove(sah.getClassName()); idsToHolders.remove(id); for (Class clazz : ds.getSupportedClasses()) {
out.writeInt(sahs.length); for (int i = 0; i < sahs.length; i++) { DataSerializer.writeNonPrimitiveClassName(sahs[i].getClassName(), out); out.writeInt(sahs[i].getId());
for (int i = 0; i < sahs.length; i++) { this.serializerIds[i] = sahs[i].getId(); this.serializerClasseNames[i] = sahs[i].getClassName();
/** * @throws SerializationException Thrown when serialization fails. */ public RegisterDataSerializersOpImpl(SerializerAttributesHolder[] holders, EventID eventId) { super(MessageType.REGISTER_DATASERIALIZERS, holders.length * 2 + 1); for (int i = 0; i < holders.length; i++) { try { getMessage().addBytesPart(BlobHelper.serializeToBlob(holders[i].getClassName())); } catch (IOException ex) { throw new SerializationException("failed serializing object", ex); } getMessage().addIntPart(holders[i].getId()); } getMessage().addBytesPart(eventId.calcBytes()); // // CALLBACK FOR TESTING PURPOSE ONLY //// if (PoolImpl.IS_INSTANTIATOR_CALLBACK) { ClientServerObserver bo = ClientServerObserverHolder.getInstance(); bo.beforeSendingToServer(eventId); } }