/* (c) 2016 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.catalog;
import java.io.IOException;
import java.io.ObjectStreamException;
import java.io.Serializable;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.util.EntityResolverProvider;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* Simple wrapper to make entity resolvers serializable, on deserialization it will fetch the resolver
* from the {@link EntityResolverProvider}
*/
class SerializableEntityResolver implements EntityResolver, Serializable {
private static final long serialVersionUID = -447221633611119495L;
transient EntityResolver delegate;
public SerializableEntityResolver(EntityResolver delegate) {
this.delegate = delegate;
}
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if(delegate != null) {
return delegate.resolveEntity(publicId, systemId);
} else {
return null;
}
}
private Object readResolve() throws ObjectStreamException {
EntityResolverProvider resolverProvider = GeoServerExtensions.bean(EntityResolverProvider.class);
EntityResolver resolver = null;
if(resolverProvider != null) {
resolver = resolverProvider.getEntityResolver();
}
return new SerializableEntityResolver(resolver);
}
}