aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-04-27 16:35:43 +0200
committerJon Bratseth <bratseth@oath.com>2018-04-27 16:35:43 +0200
commit10a4b29bf16c94aa389345ba11f6cd082365c2c9 (patch)
tree46f0d8c0c3d55dc0309221cb6c0cf6ab681dda0a /container-search/src/main/java/com
parent1e2668f0db7043dd44add1775b2e96fcfec33bc3 (diff)
Remove lazy decoding (not used)
Diffstat (limited to 'container-search/src/main/java/com')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java32
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/templates/DefaultTemplateSet.java41
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/templates/UserTemplate.java14
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java96
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java40
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java57
6 files changed, 62 insertions, 218 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
index 48b35eb7d63..288fd084d0b 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
@@ -179,19 +179,7 @@ public class FastHit extends Hit {
*/
@Override
public Object getField(String key) {
- Object value = super.getField(key);
-
- if (value instanceof LazyValue) {
- return getAndCacheLazyValue(key, (LazyValue) value);
- } else {
- return value;
- }
- }
-
- private Object getAndCacheLazyValue(String key, LazyValue value) {
- Object forcedValue = value.getValue(key);
- setField(key, forcedValue);
- return forcedValue;
+ return super.getField(key);
}
/** Returns false - this is a concrete hit containing requested content */
@@ -263,19 +251,6 @@ public class FastHit extends Hit {
this.cacheKey = cacheKey;
}
- public boolean fieldIsNotDecoded(String name) {
- return super.getField(name) instanceof LazyValue;
- }
-
- public RawField fetchFieldAsUtf8(String fieldName) {
- Object value = super.getField(fieldName);
- if (value instanceof LazyValue) {
- return ((LazyValue) value).getFieldAsUtf8(fieldName);
- } else {
- throw new IllegalStateException("Field " + fieldName + " has already been decoded:" + value);
- }
- }
-
public static final class RawField {
private final boolean needXmlEscape;
@@ -292,9 +267,4 @@ public class FastHit extends Hit {
}
- private static abstract class LazyValue {
- abstract Object getValue(String fieldName);
- abstract RawField getFieldAsUtf8(String fieldName);
- }
-
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/templates/DefaultTemplateSet.java b/container-search/src/main/java/com/yahoo/prelude/templates/DefaultTemplateSet.java
index 4aa8dea355b..ba7388a11a0 100644
--- a/container-search/src/main/java/com/yahoo/prelude/templates/DefaultTemplateSet.java
+++ b/container-search/src/main/java/com/yahoo/prelude/templates/DefaultTemplateSet.java
@@ -148,17 +148,17 @@ public class DefaultTemplateSet extends UserTemplate<XMLWriter> {
}
@Override
- public void error(Context context, XMLWriter writer) throws IOException {
+ public void error(Context context, XMLWriter writer) {
ErrorMessage error=((Result)context.get("result")).hits().getError();
writer.openTag(ERROR).attribute(CODE,error.getCode()).content(error.getMessage(),false).closeTag();
}
@Override
- public void noHits(Context context, XMLWriter writer) throws IOException {
+ public void noHits(Context context, XMLWriter writer) {
// no hits, do nothing :)
}
- protected static void renderCoverageAttributes(Coverage coverage, XMLWriter writer) throws IOException {
+ protected static void renderCoverageAttributes(Coverage coverage, XMLWriter writer) {
if (coverage == null) return;
writer.attribute(COVERAGE_DOCS,coverage.getDocs());
writer.attribute(COVERAGE_NODES,coverage.getNodes());
@@ -211,7 +211,7 @@ public class DefaultTemplateSet extends UserTemplate<XMLWriter> {
}
- protected void renderId(URI uri, XMLWriter writer) throws IOException {
+ protected void renderId(URI uri, XMLWriter writer) {
if (uri != null) {
writer.openTag(ID).content(uri.stringValue(),false).closeTag();
}
@@ -228,7 +228,7 @@ public class DefaultTemplateSet extends UserTemplate<XMLWriter> {
}
}
- private void renderSyntheticRelevancyField(Hit hit, XMLWriter writer) throws IOException {
+ private void renderSyntheticRelevancyField(Hit hit, XMLWriter writer) {
final String relevancyFieldName = "relevancy";
final Relevance relevance = hit.getRelevance();
@@ -248,7 +248,7 @@ public class DefaultTemplateSet extends UserTemplate<XMLWriter> {
writeCloseFieldElement(writer);
}
- private void writeOpenFieldElement(String fieldName, XMLWriter writer) throws IOException {
+ private void writeOpenFieldElement(String fieldName, XMLWriter writer) {
Utf8String utf8 = fieldNameMap.get(fieldName);
if (utf8 == null) {
utf8 = new Utf8String(fieldName);
@@ -258,34 +258,19 @@ public class DefaultTemplateSet extends UserTemplate<XMLWriter> {
writer.closeStartTag();
}
- private void writeCloseFieldElement(XMLWriter writer) throws IOException { // TODO: Collapse
+ private void writeCloseFieldElement(XMLWriter writer) {
writer.closeTag();
}
- protected void renderFieldContent(Context context, Hit hit,
- String name, XMLWriter writer)
- throws IOException {
-
- boolean dumpedRaw = false;
- if (hit instanceof FastHit && ((FastHit)hit).fieldIsNotDecoded(name)) {
- writer.closeStartTag();
- if ((writer.getWriter() instanceof ByteWriter) && context.isUtf8Output()) {
- dumpedRaw = dumpBytes((ByteWriter) writer.getWriter(), (FastHit) hit, name);
- }
- if (dumpedRaw) {
- writer.content("",false); // let the xml writer note that this tag had content
- }
- }
- if (!dumpedRaw) {
- String xmlval = hit.getFieldXML(name);
- if (xmlval == null) {
- xmlval = "(null)";
- }
- writer.escapedContent(xmlval,false);
+ protected void renderFieldContent(Context context, Hit hit, String name, XMLWriter writer) {
+ String xmlval = hit.getFieldXML(name);
+ if (xmlval == null) {
+ xmlval = "(null)";
}
+ writer.escapedContent(xmlval,false);
}
- private void renderSimpleField(String fieldName, Object fieldValue, XMLWriter writer) throws IOException {
+ private void renderSimpleField(String fieldName, Object fieldValue, XMLWriter writer) {
writeOpenFieldElement(fieldName, writer);
writer.content(fieldValue.toString(),false);
writeCloseFieldElement(writer);
diff --git a/container-search/src/main/java/com/yahoo/prelude/templates/UserTemplate.java b/container-search/src/main/java/com/yahoo/prelude/templates/UserTemplate.java
index ee058876d16..ac1583b0577 100644
--- a/container-search/src/main/java/com/yahoo/prelude/templates/UserTemplate.java
+++ b/container-search/src/main/java/com/yahoo/prelude/templates/UserTemplate.java
@@ -292,20 +292,6 @@ public abstract class UserTemplate<T extends Writer> extends GenericTemplateSet
public static boolean dumpBytes(ByteWriter writer,
FastHit hit,
String fieldName) throws java.io.IOException {
- FastHit.RawField asBytes;
- try {
- asBytes = hit.fetchFieldAsUtf8(fieldName);
- } catch (RuntimeException e) {
- asBytes = null;
- }
- if (asBytes != null) {
- if (asBytes.needXmlEscape()) {
- dumpAndXMLQuoteUTF8(writer, asBytes.getUtf8());
- } else {
- writer.append(asBytes.getUtf8());
- }
- return true;
- }
return false;
}
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
index 11dcafba7bf..7859358fe50 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
@@ -73,8 +73,6 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
// this is shared between umpteen threads by design
private final CopyOnWriteHashMap<String, Utf8String> fieldNameMap = new CopyOnWriteHashMap<>();
- private boolean utf8Output = false;
-
private XMLWriter writer;
public DefaultRenderer() {
@@ -92,13 +90,11 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
@Override
public void init() {
super.init();
- utf8Output = false;
writer = null;
}
@Override
public String getEncoding() {
-
if (getResult() == null
|| getResult().getQuery() == null
|| getResult().getQuery().getModel().getEncoding() == null) {
@@ -119,7 +115,6 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
private void header(XMLWriter writer, Result result) throws IOException {
// TODO: move setting this to Result
- utf8Output = "utf-8".equalsIgnoreCase(getRequestedEncoding(result.getQuery()));
writer.xmlHeader(getRequestedEncoding(result.getQuery()));
writer.openTag(RESULT).attribute(TOTAL_HIT_COUNT, String.valueOf(result.getTotalHitCount()));
renderCoverageAttributes(result.getCoverage(false), writer);
@@ -128,9 +123,7 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
}
private void renderTime(XMLWriter writer, Result result) {
- if (!result.getQuery().getPresentation().getTiming()) {
- return;
- }
+ if ( ! result.getQuery().getPresentation().getTiming()) return;
final String threeDecimals = "%.3f";
final double milli = .001d;
@@ -159,13 +152,11 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
writer.attribute(RESULTS,coverage.getResultSets());
}
-
public void error(XMLWriter writer, Result result) throws IOException {
ErrorMessage error = result.hits().getError();
writer.openTag(ERROR).attribute(CODE,error.getCode()).content(error.getMessage(),false).closeTag();
}
-
@SuppressWarnings("UnusedParameters")
protected void emptyResult(XMLWriter writer, Result result) throws IOException {}
@@ -180,63 +171,43 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
}
}
-
- private void renderSingularHit(XMLWriter writer, Hit hit) throws IOException {
+ private void renderSingularHit(XMLWriter writer, Hit hit) {
writer.openTag(HIT);
renderHitAttributes(writer, hit);
writer.closeStartTag();
renderHitFields(writer, hit);
}
- private void renderHitFields(XMLWriter writer, Hit hit) throws IOException {
+ private void renderHitFields(XMLWriter writer, Hit hit) {
renderSyntheticRelevanceField(writer, hit);
for (Iterator<Map.Entry<String, Object>> it = hit.fieldIterator(); it.hasNext(); ) {
renderField(writer, hit, it);
}
}
- private void renderField(XMLWriter writer, Hit hit, Iterator<Map.Entry<String, Object>> it) throws IOException {
- Map.Entry<String, Object> entry = it.next();
- boolean isProbablyNotDecoded = false;
- if (hit instanceof FastHit) {
- FastHit f = (FastHit) hit;
- isProbablyNotDecoded = f.fieldIsNotDecoded(entry.getKey());
- }
- renderGenericFieldPossiblyNotDecoded(writer, hit, entry, isProbablyNotDecoded);
+ private void renderField(XMLWriter writer, Hit hit, Iterator<Map.Entry<String, Object>> it) {
+ renderGenericField(writer, hit, it.next());
}
- private void renderGenericFieldPossiblyNotDecoded(XMLWriter writer, Hit hit, Map.Entry<String, Object> entry, boolean probablyNotDecoded) throws IOException {
+ private void renderGenericField(XMLWriter writer, Hit hit, Map.Entry<String, Object> entry) {
String fieldName = entry.getKey();
// skip depending on hit type
if (fieldName.startsWith("$")) return; // Don't render fields that start with $ // TODO: Move to should render
writeOpenFieldElement(writer, fieldName);
- renderFieldContentPossiblyNotDecoded(writer, hit, probablyNotDecoded, fieldName);
+ renderFieldContent(writer, hit, fieldName);
writeCloseFieldElement(writer);
}
- private void renderFieldContentPossiblyNotDecoded(XMLWriter writer, Hit hit, boolean probablyNotDecoded, String fieldName) throws IOException {
- boolean dumpedRaw = false;
- if (probablyNotDecoded && (hit instanceof FastHit)) {
- writer.closeStartTag();
- if ((writer.getWriter() instanceof ByteWriter) && utf8Output) {
- dumpedRaw = UserTemplate.dumpBytes((ByteWriter) writer.getWriter(), (FastHit) hit, fieldName);
- }
- if (dumpedRaw) {
- writer.content("", false); // let the xml writer note that this tag had content
- }
- }
- if (!dumpedRaw) {
- String xmlval = hit.getFieldXML(fieldName);
- if (xmlval == null) {
- xmlval = "(null)";
- }
- writer.escapedContent(xmlval, false);
- }
+ private void renderFieldContent(XMLWriter writer, Hit hit, String fieldName) {
+ String xmlval = hit.getFieldXML(fieldName);
+ if (xmlval == null)
+ xmlval = "(null)";
+ writer.escapedContent(xmlval, false);
}
- private void renderSyntheticRelevanceField(XMLWriter writer, Hit hit) throws IOException {
+ private void renderSyntheticRelevanceField(XMLWriter writer, Hit hit) {
final String relevancyFieldName = "relevancy";
final Relevance relevance = hit.getRelevance();
@@ -246,17 +217,17 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
}
}
- private void renderSimpleField(XMLWriter writer, String relevancyFieldName, Relevance relevance) throws IOException {
+ private void renderSimpleField(XMLWriter writer, String relevancyFieldName, Relevance relevance) {
writeOpenFieldElement(writer, relevancyFieldName);
writer.content(relevance.toString(), false);
writeCloseFieldElement(writer);
}
- private void writeCloseFieldElement(XMLWriter writer) throws IOException {
+ private void writeCloseFieldElement(XMLWriter writer) {
writer.closeTag();
}
- private void writeOpenFieldElement(XMLWriter writer, String relevancyFieldName) throws IOException {
+ private void writeOpenFieldElement(XMLWriter writer, String relevancyFieldName) {
Utf8String utf8 = fieldNameMap.get(relevancyFieldName);
if (utf8 == null) {
utf8 = new Utf8String(relevancyFieldName);
@@ -266,7 +237,7 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
writer.closeStartTag();
}
- private void renderHitAttributes(XMLWriter writer, Hit hit) throws IOException {
+ private void renderHitAttributes(XMLWriter writer, Hit hit) {
writer.attribute(TYPE, hit.getTypeString());
if (hit.getRelevance() != null) {
writer.attribute(RELEVANCY, hit.getRelevance().toString());
@@ -285,20 +256,20 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
}
}
- private void renderGroup(XMLWriter writer, HitGroup hit) throws IOException {
+ private void renderGroup(XMLWriter writer, HitGroup hit) {
writer.openTag(GROUP);
renderHitAttributes(writer, hit);
writer.closeStartTag();
}
- private void renderHitGroupOfTypeGroupHit(XMLWriter writer, HitGroup hit) throws IOException {
+ private void renderHitGroupOfTypeGroupHit(XMLWriter writer, HitGroup hit) {
writer.openTag(HIT);
renderHitAttributes(writer, hit);
renderId(writer, hit);
writer.closeStartTag();
}
- private void renderId(XMLWriter writer, HitGroup hit) throws IOException {
+ private void renderId(XMLWriter writer, HitGroup hit) {
URI uri = hit.getId();
if (uri != null) {
writer.openTag(ID).content(uri.stringValue(),false).closeTag();
@@ -420,17 +391,13 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
}
@Override
- public void beginList(DataList<?> list)
- throws IOException {
- if (getRecursionLevel() == 1) {
- return;
- }
+ public void beginList(DataList<?> list) throws IOException {
+ if (getRecursionLevel() == 1) return;
+
HitGroup hit = (HitGroup) list;
boolean renderedSimple = simpleRenderHit(writer, hit);
+ if (renderedSimple) return;
- if (renderedSimple) {
- return;
- }
renderHitGroup(writer, hit);
}
@@ -438,25 +405,20 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
public void data(Data data) throws IOException {
Hit hit = (Hit) data;
boolean renderedSimple = simpleRenderHit(writer, hit);
+ if (renderedSimple) return;
- if (renderedSimple) {
- return;
- }
renderSingularHit(writer, hit);
writer.closeTag();
}
@Override
- public void endList(DataList<?> list)
- throws IOException {
- if (getRecursionLevel() == 1) {
- return;
- }
- writer.closeTag();
+ public void endList(DataList<?> list) {
+ if (getRecursionLevel() > 1)
+ writer.closeTag();
}
@Override
- public void endResponse() throws IOException {
+ public void endResponse() {
writer.closeTag();
writer.close();
}
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
index c39f0387d46..34b02b1bee8 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
@@ -533,10 +533,6 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
if (fieldName.startsWith(VESPA_HIDDEN_FIELD_PREFIX)) return false;
- RenderDecision r = lazyRenderAwareCheck(fieldName, hit);
- if (r != RenderDecision.DO_NOT_KNOW) return r.booleanValue();
-
- // this will trigger field decoding, so it is important the lazy decoding magic is done first
Object field = hit.getField(fieldName);
if (field instanceof CharSequence && ((CharSequence) field).length() == 0) return false;
@@ -549,18 +545,6 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
return true;
}
- private RenderDecision lazyRenderAwareCheck(String fieldName, Hit hit) {
- if ( ! (hit instanceof FastHit)) return RenderDecision.DO_NOT_KNOW;
-
- FastHit asFastHit = (FastHit) hit;
- if (asFastHit.fieldIsNotDecoded(fieldName)) {
- FastHit.RawField rawField = asFastHit.fetchFieldAsUtf8(fieldName);
- if (rawField != null)
- return rawField.getUtf8().length == 0 ? RenderDecision.NO : RenderDecision.YES;
- }
- return RenderDecision.DO_NOT_KNOW;
- }
-
private void renderSpecialCasesForGrouping(Hit hit) throws IOException {
if (hit instanceof AbstractList) {
renderGroupingListSyntheticFields((AbstractList) hit);
@@ -633,9 +617,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
private void renderField(String fieldName, Hit hit) throws IOException {
generator.writeFieldName(fieldName);
- if ( ! tryDirectRendering(fieldName, hit)) {
- renderFieldContents(hit.getField(fieldName));
- }
+ renderFieldContents(hit.getField(fieldName));
}
private void renderFieldContents(Object field) throws IOException {
@@ -718,26 +700,6 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
generator.writeEndObject();
}
- /**
- * Really a private method, but package access for testability.
- */
- boolean tryDirectRendering(String fieldName, Hit hit) throws IOException {
- boolean renderedAsUtf8 = false;
- if (hit instanceof FastHit) {
- FastHit f = (FastHit) hit;
- if (f.fieldIsNotDecoded(fieldName)) {
- FastHit.RawField r = f.fetchFieldAsUtf8(fieldName);
- if (r != null) {
- byte[] utf8 = r.getUtf8();
-
- generator.writeUTF8String(utf8, 0, utf8.length);
- renderedAsUtf8 = true;
- }
- }
- }
- return renderedAsUtf8;
- }
-
@Override
public void data(Data data) throws IOException {
Preconditions.checkArgument(data instanceof Hit,
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java
index f63ff122b63..6613211a91e 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java
@@ -257,62 +257,41 @@ public final class SyncDefaultRenderer extends Renderer {
}
}
- private void renderSingularHit(XMLWriter writer, Hit hit) throws IOException {
+ private void renderSingularHit(XMLWriter writer, Hit hit) {
writer.openTag(HIT);
renderHitAttributes(writer, hit);
writer.closeStartTag();
renderHitFields(writer, hit);
}
- private void renderHitFields(XMLWriter writer, Hit hit) throws IOException {
+ private void renderHitFields(XMLWriter writer, Hit hit) {
renderSyntheticRelevanceField(writer, hit);
for (Iterator<Map.Entry<String, Object>> it = hit.fieldIterator(); it.hasNext(); ) {
renderField(writer, hit, it);
}
}
- private void renderField(XMLWriter writer, Hit hit, Iterator<Map.Entry<String, Object>> it) throws IOException {
+ private void renderField(XMLWriter writer, Hit hit, Iterator<Map.Entry<String, Object>> it) {
Map.Entry<String, Object> entry = it.next();
- boolean isProbablyNotDecoded = false;
- if (hit instanceof FastHit) {
- FastHit f = (FastHit) hit;
- isProbablyNotDecoded = f.fieldIsNotDecoded(entry.getKey());
- }
- renderGenericFieldPossiblyNotDecoded(writer, hit, entry, isProbablyNotDecoded);
- }
-
- private void renderGenericFieldPossiblyNotDecoded(XMLWriter writer, Hit hit, Map.Entry<String, Object> entry, boolean probablyNotDecoded) throws IOException {
String fieldName = entry.getKey();
- if (!shouldRenderField(hit, fieldName)) return;
+ if ( ! shouldRenderField(hit, fieldName)) return;
if (fieldName.startsWith("$")) return; // Don't render fields that start with $ // TODO: Move to should render
writeOpenFieldElement(writer, fieldName);
- renderFieldContentPossiblyNotDecoded(writer, hit, probablyNotDecoded, fieldName);
+ renderFieldContent(writer, hit, fieldName);
writeCloseFieldElement(writer);
}
- private void renderFieldContentPossiblyNotDecoded(XMLWriter writer, Hit hit, boolean probablyNotDecoded, String fieldName) throws IOException {
- boolean dumpedRaw = false;
- if (probablyNotDecoded && (hit instanceof FastHit)) {
- writer.closeStartTag();
- if ((writer.getWriter() instanceof ByteWriter) && context.isUtf8Output()) {
- dumpedRaw = UserTemplate.dumpBytes((ByteWriter) writer.getWriter(), (FastHit) hit, fieldName);
- }
- if (dumpedRaw) {
- writer.content("", false); // let the xml writer note that this tag had content
- }
- }
- if (!dumpedRaw) {
- String xmlval = hit.getFieldXML(fieldName);
- if (xmlval == null) {
- xmlval = "(null)";
- }
- writer.escapedContent(xmlval, false);
+ private void renderFieldContent(XMLWriter writer, Hit hit, String fieldName) {
+ String xmlval = hit.getFieldXML(fieldName);
+ if (xmlval == null) {
+ xmlval = "(null)";
}
+ writer.escapedContent(xmlval, false);
}
- private void renderSyntheticRelevanceField(XMLWriter writer, Hit hit) throws IOException {
+ private void renderSyntheticRelevanceField(XMLWriter writer, Hit hit) {
final String relevancyFieldName = "relevancy";
final Relevance relevance = hit.getRelevance();
@@ -321,17 +300,17 @@ public final class SyncDefaultRenderer extends Renderer {
}
}
- private void renderSimpleField(XMLWriter writer, String relevancyFieldName, Relevance relevance) throws IOException {
+ private void renderSimpleField(XMLWriter writer, String relevancyFieldName, Relevance relevance) {
writeOpenFieldElement(writer, relevancyFieldName);
writer.content(relevance.toString(), false);
writeCloseFieldElement(writer);
}
- private void writeCloseFieldElement(XMLWriter writer) throws IOException {
+ private void writeCloseFieldElement(XMLWriter writer) {
writer.closeTag();
}
- private void writeOpenFieldElement(XMLWriter writer, String relevancyFieldName) throws IOException {
+ private void writeOpenFieldElement(XMLWriter writer, String relevancyFieldName) {
Utf8String utf8 = fieldNameMap.get(relevancyFieldName);
if (utf8 == null) {
utf8 = new Utf8String(relevancyFieldName);
@@ -346,7 +325,7 @@ public final class SyncDefaultRenderer extends Renderer {
return true;
}
- private void renderHitAttributes(XMLWriter writer, Hit hit) throws IOException {
+ private void renderHitAttributes(XMLWriter writer, Hit hit) {
writer.attribute(TYPE, hit.getTypeString());
if (hit.getRelevance() != null) {
writer.attribute(RELEVANCY, hit.getRelevance().toString());
@@ -365,20 +344,20 @@ public final class SyncDefaultRenderer extends Renderer {
}
}
- private void renderGroup(XMLWriter writer, HitGroup hit) throws IOException {
+ private void renderGroup(XMLWriter writer, HitGroup hit) {
writer.openTag(GROUP);
renderHitAttributes(writer, hit);
writer.closeStartTag();
}
- private void renderHitGroupOfTypeGroupHit(XMLWriter writer, HitGroup hit) throws IOException {
+ private void renderHitGroupOfTypeGroupHit(XMLWriter writer, HitGroup hit) {
writer.openTag(HIT);
renderHitAttributes(writer, hit);
renderId(writer, hit);
writer.closeStartTag();
}
- private void renderId(XMLWriter writer, HitGroup hit) throws IOException {
+ private void renderId(XMLWriter writer, HitGroup hit) {
URI uri = hit.getId();
if (uri != null) {
writer.openTag(ID).content(uri.stringValue(),false).closeTag();