diff options
Diffstat (limited to 'vespaclient-container-plugin')
4 files changed, 30 insertions, 8 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java index 05a64d633a4..5c9669e5258 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java @@ -103,7 +103,7 @@ public class FeedHandlerV3 extends LoggingRequestHandler { SourceSessionParams sourceSessionParams = sourceSessionParams(request); clientFeederByClientId.put(clientId, new ClientFeederV3(retainSource(sessionCache, sourceSessionParams), - new FeedReaderFactory(), + new FeedReaderFactory(true), //TODO make error debugging configurable docTypeManager, clientId, metric, diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReaderFactory.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReaderFactory.java index 749f569d718..81b08d5fb25 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReaderFactory.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReaderFactory.java @@ -8,7 +8,6 @@ import com.yahoo.vespa.http.client.config.FeedParams; import com.yahoo.vespaxmlparser.FeedReader; import com.yahoo.vespaxmlparser.VespaXMLFeedReader; -import java.io.IOException; import java.io.InputStream; /** @@ -18,6 +17,11 @@ import java.io.InputStream; public class FeedReaderFactory { private static final int MARK_READLIMIT = 200; + private final boolean debug; + public FeedReaderFactory(boolean debug) { + this.debug = debug; + } + /** * Creates FeedReader * @param inputStream source of feed data @@ -31,17 +35,22 @@ public class FeedReaderFactory { FeedParams.DataFormat dataFormat) { switch (dataFormat) { case XML_UTF8: - byte [] peek = new byte[MARK_READLIMIT]; + byte [] peek = null; int bytesPeeked = 0; try { - if (inputStream.markSupported()) { + if (debug && inputStream.markSupported()) { + peek = new byte[MARK_READLIMIT]; inputStream.mark(MARK_READLIMIT); bytesPeeked = inputStream.read(peek); inputStream.reset(); } return new VespaXMLFeedReader(inputStream, docTypeManager); } catch (Exception e) { - throw new RuntimeException("Could not create VespaXMLFeedReader. First characters are: '" + Utf8.toString(peek, 0, bytesPeeked) + "'", e); + if (bytesPeeked > 0) { + throw new RuntimeException("Could not create VespaXMLFeedReader. First characters are: '" + Utf8.toString(peek, 0, bytesPeeked) + "'", e); + } else { + throw new RuntimeException("Could not create VespaXMLFeedReader.", e); + } } case JSON_UTF8: return new JsonFeedReader(inputStream, docTypeManager); diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/vespa/http/server/FeedReaderFactoryTestCase.java b/vespaclient-container-plugin/src/test/java/com/yahoo/vespa/http/server/FeedReaderFactoryTestCase.java index dab328d56d4..47f057013b7 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/vespa/http/server/FeedReaderFactoryTestCase.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/vespa/http/server/FeedReaderFactoryTestCase.java @@ -1,3 +1,4 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.http.server; import com.yahoo.document.DocumentTypeManager; @@ -12,7 +13,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class FeedReaderFactoryTestCase { - FeedReaderFactory ffr = new FeedReaderFactory(); DocumentTypeManager manager = new DocumentTypeManager(); private InputStream createStream(String s) { @@ -20,12 +20,21 @@ public class FeedReaderFactoryTestCase { } @Test - public void testXmlException() { + public void testXmlExceptionWithDebug() { try { - ffr.createReader(createStream("Some malformed xml"), manager, FeedParams.DataFormat.XML_UTF8); + new FeedReaderFactory(true).createReader(createStream("Some malformed xml"), manager, FeedParams.DataFormat.XML_UTF8); fail(); } catch (RuntimeException e) { assertEquals("Could not create VespaXMLFeedReader. First characters are: 'Some malformed xml'", e.getMessage()); } } + @Test + public void testXmlException() { + try { + new FeedReaderFactory(false).createReader(createStream("Some malformed xml"), manager, FeedParams.DataFormat.XML_UTF8); + fail(); + } catch (RuntimeException e) { + assertEquals("Could not create VespaXMLFeedReader.", e.getMessage()); + } + } } diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/vespaxmlparser/MockFeedReaderFactory.java b/vespaclient-container-plugin/src/test/java/com/yahoo/vespaxmlparser/MockFeedReaderFactory.java index 9a61af7266f..df1d5505632 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/vespaxmlparser/MockFeedReaderFactory.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/vespaxmlparser/MockFeedReaderFactory.java @@ -13,6 +13,10 @@ import java.io.InputStream; */ public class MockFeedReaderFactory extends FeedReaderFactory { + public MockFeedReaderFactory() { + super(true); + } + @Override public FeedReader createReader( InputStream inputStream, |