use of com.siemens.ct.exi.exceptions.EXIException in project arctic-sea by 52North.
the class EXIResponseWriter method write.
@Override
public void write(EXIObject<XmlObject> exiObject, OutputStream out, ResponseProxy responseProxy) throws IOException, EncodingException {
byte[] bytes = getBytes(exiObject);
try (InputStream is = new ByteArrayInputStream(bytes)) {
EXIResult result = new EXIResult(this.exiFactory.get());
result.setOutputStream(out);
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(result.getHandler());
xmlReader.parse(new InputSource(is));
} catch (EXIException | SAXException e) {
throw new EncodingException(e);
}
}
use of com.siemens.ct.exi.exceptions.EXIException in project arctic-sea by 52North.
the class EXIBinding method decode.
/**
* Parse the incoming EXI encoded {@link InputStream} transform to
* {@link XmlObject}
*
* @param request
* {@link HttpServletRequest} with EXI encoded
* {@link InputStream}
* @return {@link XmlObject} created from the EXI encoded
* {@link InputStream}
* @throws OwsExceptionReport
* If an error occurs during parsing
*/
protected XmlObject decode(HttpServletRequest request) throws OwsExceptionReport {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
EXIFactory ef = this.exiUtils.newEXIFactory();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
if (ef.isFragment()) {
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
}
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.ENCODING, StandardCharsets.UTF_8.name());
// decode EXI encoded InputStream
EXISource exiSource = new EXISource(ef);
XMLReader exiReader = exiSource.getXMLReader();
InputSource inputSource = new InputSource(request.getInputStream());
inputSource.setEncoding(request.getCharacterEncoding());
SAXSource saxSource = new SAXSource(inputSource);
saxSource.setXMLReader(exiReader);
transformer.transform(saxSource, new StreamResult(os));
// create XmlObject from OutputStream
return XmlHelper.parseXmlString(os.toString(StandardCharsets.UTF_8.name()));
} catch (IOException | EXIException ex) {
throw new NoApplicableCodeException().causedBy(ex).withMessage("Error while reading request! Message: %s", ex.getMessage());
} catch (TransformerException ex) {
throw new NoApplicableCodeException().causedBy(ex).withMessage("Error while transforming request! Message: %s", ex.getMessage());
} catch (DecodingException ex) {
throw new NoApplicableCodeException().causedBy(ex).withMessage("Error while parsing request! Message: %s", ex.getMessage());
}
}
Aggregations