X-Git-Url: http://jaekl.net/gitweb/?p=frank.git;a=blobdiff_plain;f=prod%2Fnet%2Fjaekl%2Fqd%2Fhttp%2FRequestBroker.java;h=b11128900be8b38d084872ab9a0dc17b864001c6;hp=1a4ba4cf76e42b107c1fc8fb90bafc0b7a40e325;hb=418e4d229a8b607b022cfb867bb702bec1765d13;hpb=24f097b0fe78fa44f99b9f6f2e51a8e689d86a4a diff --git a/prod/net/jaekl/qd/http/RequestBroker.java b/prod/net/jaekl/qd/http/RequestBroker.java index 1a4ba4c..b111289 100644 --- a/prod/net/jaekl/qd/http/RequestBroker.java +++ b/prod/net/jaekl/qd/http/RequestBroker.java @@ -8,10 +8,13 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; +import java.nio.charset.Charset; import java.util.ArrayList; import net.jaekl.qd.QDException; import net.jaekl.qd.util.ExceptionUtils; +import net.jaekl.qd.util.InputStreamWrapper; +import net.jaekl.qd.xml.ParseErrorHandler; import net.jaekl.qd.xml.ParseHandler; import net.jaekl.qd.xml.ParseResult; @@ -25,6 +28,7 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.HttpClientBuilder; import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; @@ -118,21 +122,32 @@ public class RequestBroker throws QDException { ParseResult result = null; - InputStream is = null; + InputStreamWrapper isw = null; + Charset utf8 = null; try { + utf8 = Charset.forName(UTF_8); if (null == rootTagName) { result = (ParseResult) rootParserClass.newInstance(); } else { result = (ParseResult) rootParserClass.getDeclaredConstructor(String.class).newInstance(rootTagName); } - is = doSubmit(method, passedParams); + isw = new InputStreamWrapper(doSubmit(method, passedParams)); XMLReader reader = XMLReaderFactory.createXMLReader(); ParseHandler ph = new ParseHandler(result); + ParseErrorHandler peh = new ParseErrorHandler(); reader.setContentHandler(ph); - reader.parse(new InputSource(is)); + reader.setErrorHandler(peh); + reader.parse(new InputSource(isw)); } + catch ( SAXParseException saxpe ) { + String response = ""; + if (null != isw) { + response = new String(isw.getHeadBytes(), utf8); + } + throw new InvalidResponseException(saxpe, m_gatewayUrl, method, response); + } catch ( InstantiationException | InvocationTargetException | IllegalAccessException @@ -144,7 +159,7 @@ public class RequestBroker throw new QDException(e); } finally { - ExceptionUtils.tryClose(is); + ExceptionUtils.tryClose(isw); } return result;