@Override public void write(OutputStream os) throws IOException { if (useBinary) { new JavaBinCodec().marshal(payload, os); } else { Utils.writeJson(payload, os, false); } }
@Override public NamedList<Object> processResponse(InputStream body, String encoding) { try { return (NamedList<Object>) new JavaBinCodec(null,stringCache).unmarshal(body); } catch (IOException e) { throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "parsing error", e); } }
@Override public void readFields(DataInput in) throws IOException { JavaBinCodec codec = new JavaBinCodec(); UnbufferedDataInputInputStream dis = new UnbufferedDataInputInputStream(in); sid = (SolrInputDocument)codec.readVal(dis); }
@Override public MapWriter.EntryWriter put(CharSequence k, Object v) throws IOException { writeExternString(k); JavaBinCodec.this.writeVal(v); return this; }
return readStr(dis); case SINT >>> 5: return readSmallInt(dis); case SLONG >>> 5: return readSmallLong(dis); case ARR >>> 5: return readArray(dis); case ORDERED_MAP >>> 5: return readOrderedMap(dis); case NAMED_LST >>> 5: return readNamedList(dis); case EXTERN_STRING >>> 5: return readExternString(dis); return dis.readShort(); case MAP: return readMap(dis); case SOLRDOC: return readSolrDocument(dis); case SOLRDOCLST: return readSolrDocumentList(dis); case BYTEARR: return readByteArray(dis); case ITERATOR: return readIterator(dis); case END: return END_OBJ; case SOLRINPUTDOC: return readSolrInputDocument(dis);
public boolean writeKnownType(Object val) throws IOException { if (writePrimitive(val)) return true; if (val instanceof NamedList) { writeNamedList((NamedList<?>) val); return true; writeSolrDocumentList((SolrDocumentList) val); return true; writeIterator((IteratorWriter) val); return true; writeArray((Collection) val); return true; writeArray((Object[]) val); return true; writeSolrDocument((SolrDocument) val); return true; writeSolrInputDocument((SolrInputDocument)val); return true; writeMap((MapWriter) val); return true; writeMap((Map) val); return true;
public boolean writeKnownType(Object val) throws IOException { if (writePrimitive(val)) return true; if (val instanceof NamedList) { writeNamedList((NamedList<?>) val); return true; writeSolrDocumentList((SolrDocumentList) val); return true; writeArray((Collection) val); return true; writeArray((Object[]) val); return true; writeSolrDocument((SolrDocument) val); return true; writeSolrInputDocument((SolrInputDocument)val); return true; writeMap((Map) val); return true; writeIterator((Iterator) val); return true; writeIterator(((Iterable) val).iterator()); return true;
@Override public void write(DataOutput out) throws IOException { JavaBinCodec codec = new JavaBinCodec(); FastOutputStream daos = FastOutputStream.wrap(DataOutputOutputStream.constructOutputStream(out)); codec.init(daos); try { codec.writeVal(sid); } finally { daos.flushBuffer(); } }
/** * TODO -- there may be a way to do this without marshal at all... * * @param req * @param rsp * * @return a response object equivalent to what you get from the XML/JSON/javabin parser. Documents become * SolrDocuments, DocList becomes SolrDocumentList etc. * * @since solr 1.4 */ @SuppressWarnings("unchecked") public static NamedList<Object> getParsedResponse(SolrQueryRequest req, SolrQueryResponse rsp) { try { Resolver resolver = new Resolver(req, rsp.getReturnFields()); ByteArrayOutputStream out = new ByteArrayOutputStream(); new JavaBinCodec(resolver).marshal(rsp.getValues(), out); InputStream in = new ByteArrayInputStream(out.toByteArray()); return (NamedList<Object>) new JavaBinCodec(resolver).unmarshal(in); } catch (Exception ex) { throw new RuntimeException(ex); } }
} else { for (Entry<String, Object> e : doc) { if(toWrite(e.getKey())) fieldsCount++; writeTag(SOLRDOC); writeTag(ORDERED_MAP, sz); for (Map.Entry<String, Object> entry : doc) { String name = entry.getKey(); if(toWrite(name)) { writeExternString(name); Object val = entry.getValue(); writeVal(val); ignoreWritable = true; for (SolrDocument child : children) { writeSolrDocument(child);
public void writeSolrInputDocument(SolrInputDocument sdoc) throws IOException { List<SolrInputDocument> children = sdoc.getChildDocuments(); int sz = sdoc.size() + (children==null ? 0 : children.size()); writeTag(SOLRINPUTDOC, sz); writeFloat(1f); // document boost for (SolrInputField inputField : sdoc.values()) { writeExternString(inputField.getName()); writeVal(inputField.getValue()); } if (children != null) { for (SolrInputDocument child : children) { writeSolrInputDocument(child); } } }
public void writeMap(Map<?,?> val) throws IOException { writeTag(MAP, val.size()); for (Map.Entry<?,?> entry : val.entrySet()) { Object key = entry.getKey(); if (key instanceof String) { writeExternString((String) key); } else { writeVal(key); } writeVal(entry.getValue()); } }
public List<Object> readIterator(DataInputInputStream fis) throws IOException { ArrayList<Object> l = new ArrayList<>(); while (true) { Object o = readVal(fis); if (o == END_OBJ) break; l.add(o); } return l; }
public void writeDocList(DocList ids, JavaBinCodec codec) throws IOException { codec.writeTag(JavaBinCodec.SOLRDOCLST); List l = new ArrayList(3); l.add((long) ids.matches()); l.add((long) ids.offset()); Float maxScore = null; if (includeScore && ids.hasScores()) { maxScore = ids.maxScore(); } l.add(maxScore); codec.writeArray(l); int sz = ids.size(); codec.writeTag(JavaBinCodec.ARR, sz); if(searcher == null) searcher = solrQueryRequest.getSearcher(); if(schema == null) schema = solrQueryRequest.getSchema(); DocIterator iterator = ids.iterator(); for (int i = 0; i < sz; i++) { int id = iterator.nextDoc(); Document doc = searcher.doc(id, returnFields); SolrDocument sdoc = getDoc(doc); if (includeScore && ids.hasScores()) { sdoc.addField("score", iterator.score()); } codec.writeSolrDocument(sdoc); } }