/** * * @param reader * @param eia * @param readProperties * @return {@link ODataDeltaFeed} object * @throws EntityProviderException */ public ODataDeltaFeed readFeed(final XMLStreamReader reader, final EntityInfoAggregator eia, final DeserializerProperties readProperties) throws EntityProviderException { try { // read xml tag reader.require(XMLStreamConstants.START_DOCUMENT, null, null); reader.nextTag(); // read feed tag reader.require(XMLStreamConstants.START_ELEMENT, Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_FEED); Map<String, String> foundPrefix2NamespaceUri = extractNamespacesFromTag(reader); foundPrefix2NamespaceUri.putAll(readProperties.getValidatedPrefixNamespaceUris()); checkAllMandatoryNamespacesAvailable(foundPrefix2NamespaceUri); DeserializerProperties entryReadProperties = DeserializerProperties.initFrom(readProperties) .addValidatedPrefixes(foundPrefix2NamespaceUri).build(); // read feed data (metadata and entries) return readFeedData(reader, eia, entryReadProperties); } catch (XMLStreamException e) { throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass() .getSimpleName()), e); } }
/** * Create {@link EntityProviderReadProperties} which can be used for reading of inline properties/entrys of navigation * links within * this current read entry. * * @param readProperties * @param navigationProperty * @return * @throws EntityProviderException */ private DeserializerProperties createInlineProperties (final DeserializerProperties readProperties, final EdmNavigationProperty navigationProperty) throws EntityProviderException { final OnDeserializeInlineContent callback = readProperties.getCallback(); DeserializerProperties currentReadProperties = DeserializerProperties.initFrom(readProperties).build(); if (callback == null) { return currentReadProperties; } else { try { return callback.receiveReadProperties(currentReadProperties, navigationProperty); } catch (ODataApplicationException e) { throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass() .getSimpleName()), e); } } }
public ODataCreateResult getResponseFromLocation(String completeUrl, String destinationName) throws ODataException { HttpResponse httpResponse = null; try { Edm edm = metadataCache.getEdm(completeUrl, getHttpClient(destinationName), destinationRelevantHeaders, errorHandler, cacheMetadata,metadataFilePath,cacheKey,isCacheRefresh); EdmEntitySet eSet = edm.getDefaultEntityContainer().getEntitySet(this.entitySet); HttpGet requestGet = new HttpGet(location); httpResponse = getHttpClient(destinationName).execute(requestGet); ODataConnectivityUtil.checkHttpStatus(httpResponse, errorHandler); EntityStream entityStream = new EntityStream(); entityStream.setContent(httpResponse.getEntity().getContent()); entityStream.setReadProperties(DeserializerProperties.init().build()); String contentType = "application/atom+xml"; if (!httpResponse.getFirstHeader("Content-Type").toString().contains(contentType)) contentType = "application/json"; ODataEntry deepInsResponse = ODataClient.newInstance().createDeserializer(contentType).readEntry(eSet, entityStream); return new ODataCreateResult(httpResponse, deepInsResponse.getProperties()); } catch (IOException e1) { HttpClientUtils.closeQuietly(httpResponse); throw new ODataException(null, "IOException", e1); } catch (EntityProviderException | EdmException e1) { HttpClientUtils.closeQuietly(httpResponse); throw new ODataException(ODataExceptionType.RESPONSE_DESERIALIZATION_FAILED, "Error during serialization of input payload. " + e1.getMessage(), e1); } finally { HttpClientUtils.closeQuietly(httpResponse); } } private boolean isNavigationFlow(){
EntityStream entityStream = new EntityStream(); entityStream.setContent(httpResponse.getEntity().getContent()); entityStream.setReadProperties(DeserializerProperties.init().build()); ODataEntry deepInsResponse = ODataClient.newInstance().createDeserializer(contentType).readEntry(eSet, entityStream);
DeserializerProperties.init() .isValidatingFacets(readProperties.isValidatingFacets()) .build();
DeserializerProperties.init() .isValidatingFacets(readProperties.isValidatingFacets()) .build();