2

after many days of search and many unsuccessful tries, I hope that the community knows a way to achieve my task:

I want to use grails as a kind of a proxy to my solr backend. By this, I want to ensure that only authorized requests are handled by solr. Grails checks the provided collection and the requested action and validated the request with predefined user based rules. Therefore, I extended my grails URL mapping to

"/documents/$collection/$query" {
    controller = "documents"
    action = action = [GET: "proxy_get", POST: "proxy_post"]
}

The proxy_get method works fine even when the client is using solrJ. All I have to to is to forward the URL request to solr and to reply with the solr response.

However, in the proxy_post method, I need to get the raw body data of the request to forward it to solr. SolrJ is using javabin for that and I was not able so far to get the raw binary request. The most promising approach was this:

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(solrUrl);
InputStream requestStream = request.getInputStream();
ContentType contentType = ContentType.create(request.getContentType());
httpPost.setEntity(new ByteArrayEntity(IOUtils.toByteArray(requestStream), contentType));
httpPost.setHeader("Content-Type", request.getContentType())
HttpResponse solrResponse = httpClient.execute(httpPost);

However, the transferred content is empty in case of javabin (e.g. when I add a document using solrJ).

So my question is, whether there is any possibility to get to the raw binary post content so that I can forward the request to solr.

Mathias

  • Some suggestions here: http://stackoverflow.com/questions/1046721/accessing-the-raw-body-of-a-put-or-post-request – Andrew May 13 '13 at 21:17

1 Answers1

0

try using Groovy HttpBuilder. It has a powerful low-level API, while providing groovyness

injecteer
  • 20,038
  • 4
  • 45
  • 89