Skip to content

Instantly share code, notes, and snippets.

@kozy4324
Created March 2, 2015 02:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kozy4324/851f2b5d1a6fc435d456 to your computer and use it in GitHub Desktop.
Save kozy4324/851f2b5d1a6fc435d456 to your computer and use it in GitHub Desktop.
[JRuby][Solr] BinaryResponseWriterで書き出したものをRackサーバーで返す
java_import Java::java.io.ByteArrayOutputStream
java_import Java::java.io.OutputStreamWriter
java_import Java::java.util.HashMap
java_import Java::org.apache.solr.common.SolrDocument
java_import Java::org.apache.solr.common.SolrDocumentList
java_import Java::org.apache.solr.common.params.SolrParams
java_import Java::org.apache.solr.common.util.NamedList
java_import Java::org.apache.solr.request.SolrQueryRequestBase
java_import Java::org.apache.solr.response.SolrQueryResponse
java_import Java::org.apache.solr.response.XMLResponseWriter
java_import Java::org.apache.solr.response.BinaryResponseWriter
module Solr
class ResponseWriterWrapper
# Abstractなクラスを継承
class MySolrQueryRequest < SolrQueryRequestBase; end
class MySolrParams < SolrParams
def get param
nil
end
def getParams param
[]
end
def getParameterNamesIterator
HashMap.new.keySet.iterator
end
end
# SolrQueryRequest
def request
MySolrQueryRequest.new nil, MySolrParams.new
end
# SolrQueryResponse
def response data
docList = SolrDocumentList.new
data.each {|d|
doc = SolrDocument.new
d.each {|k,v| doc.setField k, v }
docList.add doc
}
docList.setNumFound data.size
docList.setStart 0
docList.setMaxScore 1.0
res = SolrQueryResponse.new
res.add "response", docList
res
end
def responseWriter
BinaryResponseWriter.new
end
def write data
outputStream = ByteArrayOutputStream.new
responseWriter.write outputStream, request, response(data)
byteArray = outputStream.toByteArray
String.from_java_bytes byteArray
end
end
end
require "webrick"
require "yaml"
require "./solr/response_writer_wrapper"
server = WEBrick::HTTPServer.new(
Port: 8080,
Logger: WEBrick::Log.new('/dev/null'),
AccessLog: []
)
server.mount_proc("/") {|req, res|
res["Content-Type"] = "application/octet-stream"
data = YAML.load <<EOM
- poi_code: G0123456789
category1_code:
- M01
EOM
puts data
res.body = Solr::ResponseWriterWrapper.new.write data
}
server.start
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment