/** does NOT escape character data in val; it must already be valid XML. Attributes are always escaped. */ public final static void writeUnescapedXML(Writer out, String tag, String val, Object... attrs) throws IOException { writeXML(out, tag, (writer1) -> writer1.write(val), attrs); }
/** escapes character data in val and attributes */ public static void writeXML(Writer out, String tag, String val, Map<String, String> attrs) throws IOException { writeXML(out, tag, val, attrs.entrySet().stream().flatMap((entry) -> Stream.of(entry.getKey(), entry.getValue())).toArray()); }
public static String simpleTag(String tag, String... args) { try { StringWriter writer = new StringWriter(); XML.writeXML(writer, tag, (String) null, (Object[])args); return writer.getBuffer().toString(); } catch (IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
private static String simpleTag(String tag, String... args) { try { StringWriter r = new StringWriter(); // this is annoying if (null == args || 0 == args.length) { XML.writeXML(r, tag, null); } else { XML.writeXML(r, tag, null, (Object[])args); } return r.getBuffer().toString(); } catch (IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
/** * Generates a delete xml string * @param val text that has not already been xml escaped */ private static String delete(String deltype, String val) { try { StringWriter r = new StringWriter(); r.write("<delete>"); XML.writeXML(r, deltype, val); r.write("</delete>"); return r.getBuffer().toString(); } catch (IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
/** escapes character data in val and attributes */ public final static void writeXML(Writer out, String tag, String val, Object... attrs) throws IOException { final Writable writable = val != null ? (writer1) -> XML.escapeCharData(val, writer1) : null; writeXML(out, tag, writable, attrs); }
/** * A helper that creates an xml <doc> containing all of the * fields and values specified * * @param fieldsAndValues 0 and Even numbered args are fields names odds are field values. */ public static String makeSimpleDoc(String... fieldsAndValues) { try { StringWriter w = new StringWriter(); w.append("<doc>"); for (int i = 0; i < fieldsAndValues.length; i+=2) { XML.writeXML(w, "field", fieldsAndValues[i + 1], "name", fieldsAndValues[i]); } w.append("</doc>"); return w.toString(); } catch (IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
/** * A helper that creates an xml <doc> containing all of the * fields and values specified * * @param fieldsAndValues 0 and Even numbered args are fields names odds are field values. */ public static StringBuffer makeSimpleDoc(String... fieldsAndValues) { try { StringWriter w = new StringWriter(); w.append("<doc>"); for (int i = 0; i < fieldsAndValues.length; i+=2) { XML.writeXML(w, "field", fieldsAndValues[i+1], "name", fieldsAndValues[i]); } w.append("</doc>"); return w.getBuffer(); } catch (IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
/** * Generates a delete by id xml string * @param id ID that has not already been xml escaped * @param args The attributes of the delete tag */ public static String deleteById(String id, String... args) { try { StringWriter r = new StringWriter(); XML.writeXML(r, "id", id); return delete(r.getBuffer().toString(), args); } catch(IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
/** * Generates a delete by query xml string * @param q Query that has not already been xml escaped * @param args The attributes of the delete tag */ public static String deleteByQuery(String q, String... args) { try { StringWriter r = new StringWriter(); XML.writeXML(r, "query", q); return delete(r.getBuffer().toString(), args); } catch(IOException e) { throw new RuntimeException ("this should never happen with a StringWriter", e); } }
private static void writeVal(Writer writer, float boost, String name, Object v, String update) throws IOException { if (v instanceof Date) { v = DateUtil.getThreadLocalDateFormat().format( (Date)v ); } else if (v instanceof byte[]) { byte[] bytes = (byte[]) v; v = Base64.byteArrayToBase64(bytes, 0, bytes.length); } else if (v instanceof ByteBuffer) { ByteBuffer bytes = (ByteBuffer) v; v = Base64.byteArrayToBase64(bytes.array(), bytes.position(),bytes.limit() - bytes.position()); } if (update == null) { if( boost != 1.0f ) { XML.writeXML(writer, "field", v.toString(), "name", name, "boost", boost); } else if (v != null) { XML.writeXML(writer, "field", v.toString(), "name", name ); } } else { if( boost != 1.0f ) { XML.writeXML(writer, "field", v.toString(), "name", name, "boost", boost, "update", update); } else { if (v == null) { XML.writeXML(writer, "field", null, "name", name, "update", update, "null", true); } else { XML.writeXML(writer, "field", v.toString(), "name", name, "update", update); } } } }
private static void writeVal(Writer writer, String name, Object v, String update) throws IOException { if (v instanceof Date) { v = ((Date)v).toInstant().toString(); } else if (v instanceof byte[]) { byte[] bytes = (byte[]) v; v = Base64.byteArrayToBase64(bytes, 0, bytes.length); } else if (v instanceof ByteBuffer) { ByteBuffer bytes = (ByteBuffer) v; v = Base64.byteArrayToBase64(bytes.array(), bytes.position(),bytes.limit() - bytes.position()); } XML.Writable valWriter = null; if(v instanceof SolrInputDocument) { final SolrInputDocument solrDoc = (SolrInputDocument) v; valWriter = (writer1) -> writeXML(solrDoc, writer1); } else if(v != null) { final Object val = v; valWriter = (writer1) -> XML.escapeCharData(val.toString(), writer1); } if (update == null) { if (v != null) { XML.writeXML(writer, "field", valWriter, "name", name); } } else { if (v == null) { XML.writeXML(writer, "field", (XML.Writable) null, "name", name, "update", update, "null", true); } else { XML.writeXML(writer, "field", valWriter, "name", name, "update", update); } } }
public static void writeXML( SolrInputDocument doc, Writer writer ) throws IOException { writer.write("<doc boost=\""+doc.getDocumentBoost()+"\">"); for( SolrInputField field : doc ) { float boost = field.getBoost(); String name = field.getName(); for( Object v : field ) { if (v instanceof Date) { v = DateUtil.getThreadLocalDateFormat().format( (Date)v ); }else if (v instanceof byte[]) { byte[] bytes = (byte[]) v; v = Base64.byteArrayToBase64(bytes, 0,bytes.length); } else if (v instanceof ByteBuffer) { ByteBuffer bytes = (ByteBuffer) v; v = Base64.byteArrayToBase64(bytes.array(), bytes.position(),bytes.limit() - bytes.position()); } if( boost != 1.0f ) { XML.writeXML(writer, "field", v.toString(), "name", name, "boost", boost ); } else if (v != null) { XML.writeXML(writer, "field", v.toString(), "name", name ); } // only write the boost for the first multi-valued field // otherwise, the used boost is the product of all the boost values boost = 1.0f; } } writer.write("</doc>"); }
try { SolrException.logOnce(log, "Error processing \"legacy\" update command", ex); XML.writeXML(output, "result", SolrException.toStr(ex), "status", "1"); } catch (Exception ee) { log.error("Error writing to output stream: " + ee);