/* (c) 2014 - 2015 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.csw.xml.v2_0_2; import java.io.Reader; import java.io.StringReader; import java.util.Map; import org.apache.commons.io.IOUtils; import org.geoserver.ows.DispatcherCallback; import org.geoserver.ows.Request; import org.geoserver.ows.Response; import org.geoserver.platform.Operation; import org.geoserver.platform.Service; import org.geoserver.platform.ServiceException; import org.geotools.csw.CSWConfiguration; import org.geoserver.util.EntityResolverProvider; /** * The GetRecords request has a "validate" mode in which we have to return an Acknowledgement * with the verbatim request, thus we have to store it */ public class CSWRecordingXmlReader extends CSWXmlReader implements DispatcherCallback { public static final ThreadLocal<String> RECORDED_REQUEST = new ThreadLocal<String>(); public CSWRecordingXmlReader(String element, String version, CSWConfiguration configuration, EntityResolverProvider resolverProvider) { super(element, version, configuration, resolverProvider); } public Object read(Object request, Reader reader, Map kvp) throws Exception { String requestText = IOUtils.toString(reader); RECORDED_REQUEST.set(requestText); return super.read(requestText, new StringReader(requestText), kvp); } @Override public Request init(Request request) { return request; } @Override public Service serviceDispatched(Request request, Service service) throws ServiceException { return service; } @Override public Operation operationDispatched(Request request, Operation operation) { return operation; } @Override public Object operationExecuted(Request request, Operation operation, Object result) { return result; } @Override public Response responseDispatched(Request request, Operation operation, Object result, Response response) { return response; } @Override public void finished(Request request) { RECORDED_REQUEST.remove(); } }