@Override public void write( Writer writer, SolrQueryRequest solrQueryRequest, org.apache.solr.response.SolrQueryResponse solrQueryResponse) throws IOException { final MessageContext msgContext = (MessageContext) solrQueryResponse.getValues().get("MessageContext"); final Message message = msgContext.getResponseMessage(); if (message == null) return; SolrSRWDatabase.RequestTypes requestType = (SolrSRWDatabase.RequestTypes) msgContext.getProperty(SolrSRWDatabase.RequestTypes.class.getSimpleName()); String tag = (requestType == null) ? null : "</" + requestType.name().replace("Request", "Response") + ">"; final SolrSRWDatabase.Transport transport = (SolrSRWDatabase.Transport) msgContext.getProperty(SolrSRWDatabase.Transport.class.getSimpleName()); switch (transport) { case SRW: ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { message.writeTo(baos); } catch (SOAPException e) { log.error(e, e); // Impossible at this point. } writer.write(baos.toString("UTF-8")); break; case SRU: // Response which requires removal of SOAP envelope and xsi:type attributes. writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); Object resource = msgContext.getProperty("resource"); if (resource == null) // No system stylesheet... but sometimes people may add a custom one. { resource = msgContext.getProperty("stylesheet"); if (resource != null) { writer.write( "<?xml-stylesheet title=\"Custom XSL formatting\" type=\"text/xsl\" href=\""); writer.write(String.valueOf(resource)); writer.write("\"?>"); } } else { Object _stylesheet = msgContext.getProperty("stylesheet"); String stylesheet = (_stylesheet == null) ? String.valueOf(resource) : String.valueOf(_stylesheet); if (stylesheet.length() != 0) { writer.write( "<?xml-stylesheet title=\"OCLC XSL formatting\" type=\"text/xsl\" href=\""); writer.write(String.valueOf(resource)); writer.write("\"?>"); } } // We need to change the SOAP response into SRU writer.write(cleanup(message, tag, true)); break; case JSON: SolrSRWDatabase db = (SolrSRWDatabase) msgContext.getProperty("db"); String jsonp = (String) msgContext.getProperty("jsonp"); writer.write(jsonp); writer.write("("); Transformer t = db.getTransformers("xml-2-json"); StreamSource source = new StreamSource(new StringReader(cleanup(message, tag, true))); try { t.transform(source, new StreamResult(writer)); } catch (TransformerException e) { log.error(e, e); } writer.write(")"); break; } }