package org.apereo.cas.ticket.registry.support.kryo.serial;
import java.lang.reflect.Constructor;
import org.apereo.cas.util.http.HttpClient;
import org.apereo.cas.util.http.SimpleHttpClientFactoryBean;
import org.apereo.cas.support.saml.authentication.principal.SamlService;
import org.apereo.cas.ticket.registry.support.kryo.FieldHelper;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
/**
* Serializer for {@link SamlService} class.
*
* @author Marvin S. Addison
* @since 3.0.0
*/
public class SamlServiceSerializer extends AbstractWebApplicationServiceSerializer<SamlService> {
private static final Constructor CONSTRUCTOR;
static {
try {
CONSTRUCTOR = SamlService.class.getDeclaredConstructor(
String.class, String.class, String.class, HttpClient.class, String.class);
CONSTRUCTOR.setAccessible(true);
} catch (final NoSuchMethodException e) {
throw new IllegalStateException("Expected constructor signature not found.", e);
}
}
/**
* Instantiates a new SAML service serializer.
*
* @param helper the helper
*/
public SamlServiceSerializer(final FieldHelper helper) {
super(helper);
}
@Override
public void write(final Kryo kryo, final Output output, final SamlService service) {
super.write(kryo, output, service);
kryo.writeObject(output, service.getRequestID());
}
@Override
protected SamlService createService(final Kryo kryo, final Input input, final String id,
final String originalUrl, final String artifactId) {
final String requestId = kryo.readObject(input, String.class);
try {
return (SamlService) CONSTRUCTOR.newInstance(id, originalUrl, artifactId, new SimpleHttpClientFactoryBean().getObject(),
requestId);
} catch (final Exception e) {
throw new IllegalStateException("Error creating SamlService", e);
}
}
}