Skip to content

Commit

Permalink
Merge pull request #9781 from pferraro/marshalling
Browse files Browse the repository at this point in the history
WFLY-8341 Custom externalizer for ZoneOffset is ignored
  • Loading branch information
kabir committed Mar 13, 2017
2 parents 8dec76a + 9d2711f commit 67c0369
Show file tree
Hide file tree
Showing 54 changed files with 182 additions and 333 deletions.

This file was deleted.

Expand Up @@ -25,39 +25,63 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;

import org.jboss.ejb.client.BasicSessionID;
import org.jboss.ejb.client.SessionID;
import org.jboss.ejb.client.UUIDSessionID;
import org.jboss.ejb.client.UnknownSessionID;
import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.marshalling.Externalizer;
import org.wildfly.clustering.marshalling.spi.IndexExternalizer;

/**
* @author Paul Ferraro
*/
public class SessionIDExternalizer implements Externalizer<SessionID> {
public class SessionIDExternalizer<T extends SessionID> implements Externalizer<T> {

private final Class<? extends SessionID> targetClass;
private final IndexExternalizer lengthExternalizer;
private final Class<T> targetClass;

SessionIDExternalizer(Class<? extends SessionID> targetClass, IndexExternalizer lengthExternalizer) {
public SessionIDExternalizer(Class<T> targetClass) {
this.targetClass = targetClass;
this.lengthExternalizer = lengthExternalizer;
}

@Override
public void writeObject(ObjectOutput output, SessionID id) throws IOException {
byte[] encoded = id.getEncodedForm();
this.lengthExternalizer.writeData(output, encoded.length);
IndexExternalizer.UNSIGNED_BYTE.writeData(output, encoded.length);
output.write(encoded);
}

@SuppressWarnings("unchecked")
@Override
public SessionID readObject(ObjectInput input) throws IOException, ClassNotFoundException {
byte[] encoded = new byte[this.lengthExternalizer.readData(input)];
public T readObject(ObjectInput input) throws IOException, ClassNotFoundException {
byte[] encoded = new byte[IndexExternalizer.UNSIGNED_BYTE.readData(input)];
input.readFully(encoded);
return SessionID.createSessionID(encoded);
return (T) SessionID.createSessionID(encoded);
}

@Override
public Class<? extends SessionID> getTargetClass() {
public Class<T> getTargetClass() {
return this.targetClass;
}

@MetaInfServices(Externalizer.class)
public static class BasicSessionIDExternalizer extends SessionIDExternalizer<BasicSessionID> {
public BasicSessionIDExternalizer() {
super(BasicSessionID.class);
}
}

@MetaInfServices(Externalizer.class)
public static class UnknownSessionIDExternalizer extends SessionIDExternalizer<UnknownSessionID> {
public UnknownSessionIDExternalizer() {
super(UnknownSessionID.class);
}
}

@MetaInfServices(Externalizer.class)
public static class UUIDSessionIDExternalizer extends SessionIDExternalizer<UUIDSessionID> {
public UUIDSessionIDExternalizer() {
super(UUIDSessionID.class);
}
}
}

This file was deleted.

This file was deleted.

Expand Up @@ -28,7 +28,7 @@

import org.jboss.ejb.client.SessionID;
import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.ejb.infinispan.BasicSessionIDExternalizer;
import org.wildfly.clustering.ejb.infinispan.SessionIDExternalizer;
import org.wildfly.clustering.marshalling.Externalizer;

/**
Expand All @@ -37,30 +37,29 @@
@MetaInfServices(Externalizer.class)
public class InfinispanBeanEntryExternalizer implements Externalizer<InfinispanBeanEntry<SessionID>> {

private final Externalizer<SessionID> externalizer = new BasicSessionIDExternalizer();
private static final Externalizer<SessionID> EXTERNALIZER = new SessionIDExternalizer<>(SessionID.class);

@Override
public void writeObject(ObjectOutput output, InfinispanBeanEntry<SessionID> entry) throws IOException {
output.writeUTF(entry.getBeanName());
this.externalizer.writeObject(output, entry.getGroupId());
EXTERNALIZER.writeObject(output, entry.getGroupId());
Date lastAccessedTime = entry.getLastAccessedTime();
output.writeLong((lastAccessedTime != null) ? lastAccessedTime.getTime() : 0);
}

@Override
public InfinispanBeanEntry<SessionID> readObject(ObjectInput input) throws IOException, ClassNotFoundException {
InfinispanBeanEntry<SessionID> entry = new InfinispanBeanEntry<>(input.readUTF(), this.externalizer.readObject(input));
InfinispanBeanEntry<SessionID> entry = new InfinispanBeanEntry<>(input.readUTF(), EXTERNALIZER.readObject(input));
long time = input.readLong();
if (time > 0) {
entry.setLastAccessedTime(new Date(time));
}
return entry;
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings("unchecked")
@Override
public Class<InfinispanBeanEntry<SessionID>> getTargetClass() {
Class targetClass = InfinispanBeanEntry.class;
return targetClass;
return (Class<InfinispanBeanEntry<SessionID>>) (Class<?>) InfinispanBeanEntry.class;
}
}
Expand Up @@ -27,7 +27,7 @@

import org.jboss.ejb.client.SessionID;
import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.ejb.infinispan.BasicSessionIDExternalizer;
import org.wildfly.clustering.ejb.infinispan.SessionIDExternalizer;
import org.wildfly.clustering.marshalling.Externalizer;

/**
Expand All @@ -36,7 +36,7 @@
@MetaInfServices(Externalizer.class)
public class InfinispanBeanKeyExternalizer implements Externalizer<InfinispanBeanKey<SessionID>> {

private final Externalizer<SessionID> externalizer = new BasicSessionIDExternalizer();
private final Externalizer<SessionID> externalizer = new SessionIDExternalizer<>(SessionID.class);

@Override
public void writeObject(ObjectOutput output, InfinispanBeanKey<SessionID> key) throws IOException {
Expand All @@ -48,10 +48,9 @@ public InfinispanBeanKey<SessionID> readObject(ObjectInput input) throws IOExcep
return new InfinispanBeanKey<>(this.externalizer.readObject(input));
}

@SuppressWarnings({ "unchecked", "rawtypes" })
@SuppressWarnings("unchecked")
@Override
public Class<InfinispanBeanKey<SessionID>> getTargetClass() {
Class targetClass = InfinispanBeanKey.class;
return targetClass;
return (Class<InfinispanBeanKey<SessionID>>) (Class<?>) InfinispanBeanKey.class;
}
}
Expand Up @@ -50,10 +50,9 @@ public InfinispanBeanGroupEntry<I, T> readObject(ObjectInput input) throws IOExc
return new InfinispanBeanGroupEntry<>(this.externalizer.readObject(input));
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings("unchecked")
@Override
public Class<InfinispanBeanGroupEntry<I, T>> getTargetClass() {
Class targetClass = InfinispanBeanGroupEntry.class;
return targetClass;
return (Class<InfinispanBeanGroupEntry<I, T>>) (Class<?>) InfinispanBeanGroupEntry.class;
}
}
Expand Up @@ -28,7 +28,7 @@

import org.jboss.ejb.client.SessionID;
import org.kohsuke.MetaInfServices;
import org.wildfly.clustering.ejb.infinispan.BasicSessionIDExternalizer;
import org.wildfly.clustering.ejb.infinispan.SessionIDExternalizer;
import org.wildfly.clustering.marshalling.Externalizer;

/**
Expand All @@ -37,7 +37,7 @@
@MetaInfServices(Externalizer.class)
public class InfinispanBeanGroupKeyExternalizer implements Externalizer<InfinispanBeanGroupKey<SessionID>> {

private final Externalizer<SessionID> externalizer = new BasicSessionIDExternalizer();
private final Externalizer<SessionID> externalizer = new SessionIDExternalizer<>(SessionID.class);

@Override
public void writeObject(ObjectOutput output, InfinispanBeanGroupKey<SessionID> key) throws IOException {
Expand All @@ -49,10 +49,9 @@ public InfinispanBeanGroupKey<SessionID> readObject(ObjectInput input) throws IO
return new InfinispanBeanGroupKey<>(this.externalizer.readObject(input));
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings("unchecked")
@Override
public Class<? extends InfinispanBeanGroupKey<SessionID>> getTargetClass() {
Class targetClass = InfinispanBeanGroupKey.class;
return targetClass;
public Class<InfinispanBeanGroupKey<SessionID>> getTargetClass() {
return (Class<InfinispanBeanGroupKey<SessionID>>) (Class<?>) InfinispanBeanGroupKey.class;
}
}
Expand Up @@ -58,5 +58,5 @@ public interface Externalizer<T> {
* Returns the target class of the object to externalize.
* @return a class to be externalized
*/
Class<? extends T> getTargetClass();
Class<T> getTargetClass();
}
Expand Up @@ -81,7 +81,8 @@ public void writeObject(Marshaller marshaller, Object object) throws IOException

@Override
public Writer getObjectWriter(final Object object) throws IOException {
return this.writers.get(object.getClass());
Class<?> targetClass = object.getClass();
return this.writers.get(targetClass.isEnum() ? ((Enum<?>) object).getDeclaringClass() : targetClass);
}

@Override
Expand Down
Expand Up @@ -50,10 +50,9 @@ public HashableMarshalledValue<T> readObject(ObjectInput input) throws IOExcepti
return new HashableMarshalledValue<>(value.getBytes(), hashCode);
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings("unchecked")
@Override
public Class<HashableMarshalledValue<T>> getTargetClass() {
Class targetClass = HashableMarshalledValue.class;
return targetClass;
return (Class<HashableMarshalledValue<T>>) (Class<?>) HashableMarshalledValue.class;
}
}
Expand Up @@ -57,10 +57,9 @@ public void writeObject(ObjectOutput output, SimpleMarshalledValue<T> object) th
}
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings("unchecked")
@Override
public Class<? extends SimpleMarshalledValue<T>> getTargetClass() {
Class targetClass = SimpleMarshalledValue.class;
return targetClass;
public Class<SimpleMarshalledValue<T>> getTargetClass() {
return (Class<SimpleMarshalledValue<T>>) (Class<?>) SimpleMarshalledValue.class;
}
}
Expand Up @@ -53,7 +53,7 @@ public E readObject(ObjectInput input) throws IOException, ClassNotFoundExceptio
}

@Override
public Class<? extends E> getTargetClass() {
public Class<E> getTargetClass() {
return this.enumClass;
}
}
Expand Up @@ -145,7 +145,7 @@ public void writeObject(ObjectOutput output, Integer index) throws IOException {
}

@Override
public Class<? extends Integer> getTargetClass() {
public Class<Integer> getTargetClass() {
return Integer.class;
}
}

0 comments on commit 67c0369

Please sign in to comment.