private void readResponse()

in plugin/src/com/microsoft/alm/plugin/context/soap/CatalogServiceImpl.java [192:251]


    private void readResponse(final HttpResponse httpResponse, final ElementDeserializable readFromElement) {

        InputStream responseStream = null;
        try {

            final Header encoding = httpResponse.getFirstHeader("Content-Encoding"); //$NON-NLS-1$
            if (encoding != null && encoding.getValue().equalsIgnoreCase("gzip")) //$NON-NLS-1$
            {
                responseStream = new GZIPInputStream(httpResponse.getEntity().getContent());
            } else {
                responseStream = httpResponse.getEntity().getContent();
            }
            XMLStreamReader reader = null;
            try {

                reader = XML_INPUT_FACTORY.createXMLStreamReader(responseStream);

                final QName envelopeQName = new QName(SOAP, "Envelope", "soap"); //$NON-NLS-1$ //$NON-NLS-2$
                final QName headerQName = new QName(SOAP, "Header", "soap"); //$NON-NLS-1$ //$NON-NLS-2$
                final QName bodyQName = new QName(SOAP, "Body", "soap"); //$NON-NLS-1$ //$NON-NLS-2$

                // Read the envelope.
                if (reader.nextTag() == XMLStreamConstants.START_ELEMENT && reader.getName().equals(envelopeQName)) {
                    while (reader.nextTag() == XMLStreamConstants.START_ELEMENT) {
                        if (reader.getName().equals(headerQName)) {
                            // Ignore headers for now.
                            readUntilElementEnd(reader);
                        } else if (reader.getName().equals(bodyQName)) {
                            if (reader.nextTag() == XMLStreamConstants.START_ELEMENT && reader.getName().getLocalPart().equals(QUERY_NODE_RESPONSE)) {
                                readFromElement.readFromElement(reader);
                                return;
                            }
                        }
                    }
                }
            } catch (final XMLStreamException e) {
                logger.warn("readResponse", e);
                throw new RuntimeException(e);
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final XMLStreamException e) {
                        // Ignore and continue
                    }
                }
            }
        } catch (IOException e) {
            logger.warn("readResponse", e);
            throw new RuntimeException(e);
        } finally {
            if (responseStream != null) {
                try {
                    responseStream.close();
                } catch (IOException e) {
                    // Ignore and continue
                }
            }
        }
    }