diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-04-27 16:35:43 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-04-27 16:35:43 +0200 |
commit | 10a4b29bf16c94aa389345ba11f6cd082365c2c9 (patch) | |
tree | 46f0d8c0c3d55dc0309221cb6c0cf6ab681dda0a /container-search/src/main/java/com | |
parent | 1e2668f0db7043dd44add1775b2e96fcfec33bc3 (diff) |
Remove lazy decoding (not used)
Diffstat (limited to 'container-search/src/main/java/com')
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(); |