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;
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.setErrorHandler(peh);
- reader.parse(new InputSource(is));
+ reader.parse(new InputSource(isw));
}
catch ( SAXParseException saxpe ) {
- throw new InvalidResponseException(m_gatewayUrl, method, saxpe);
+ String response = "<n/a>";
+ if (null != isw) {
+ response = new String(isw.getHeadBytes(), utf8);
+ }
+ throw new InvalidResponseException(saxpe, m_gatewayUrl, method, response);
}
catch ( InstantiationException
| InvocationTargetException
throw new QDException(e);
}
finally {
- ExceptionUtils.tryClose(is);
+ ExceptionUtils.tryClose(isw);
}
return result;