Java Code Examples for org.apache.olingo.server.api.ODataResponse#setHeader()
The following examples show how to use
org.apache.olingo.server.api.ODataResponse#setHeader() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: DebugResponseHelperImpl.java From olingo-odata4 with Apache License 2.0 | 5 votes |
@Override public ODataResponse createDebugResponse(final DebugInformation debugInfo) { try { final List<DebugTab> parts = createParts(debugInfo); ODataResponse response = new ODataResponse(); final String contentTypeString; final InputStream body; if (requestedFormat == DebugFormat.DOWNLOAD || requestedFormat == DebugFormat.HTML) { String title = debugInfo.getRequest() == null ? "V4 Service" : "V4 Service: " + debugInfo.getRequest().getRawODataPath(); body = wrapInHtml(parts, title); contentTypeString = ContentType.TEXT_HTML.toContentTypeString(); } else { // for JSON and also default response handling body = wrapInJson(parts); contentTypeString = ContentType.APPLICATION_JSON.toContentTypeString(); } // for download add additional Content-Disposition header if (requestedFormat == DebugFormat.DOWNLOAD) { response.setHeader("Content-Disposition", "attachment; filename=OData-Response." + new Date().toString().replace(' ', '_').replace(':', '.') + ".html"); } response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, contentTypeString); response.setContent(body); return response; } catch (IOException e) { // Should not happen. In case it does the library will deliver a default response. So no handling here. throw new ODataRuntimeException(e); } }
Example 2
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); // in our example, the first segment is the EntitySet EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 4th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 3
Source File: DemoEntityProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void createEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat, ContentType responseFormat) throws ODataApplicationException, DeserializerException, SerializerException { // 1. Retrieve the entity type from the URI EdmEntitySet edmEntitySet = Util.getEdmEntitySet(uriInfo); EdmEntityType edmEntityType = edmEntitySet.getEntityType(); // 2. create the data in backend // 2.1. retrieve the payload from the POST request for the entity to create and deserialize it InputStream requestInputStream = request.getBody(); ODataDeserializer deserializer = odata.createDeserializer(requestFormat); DeserializerResult result = deserializer.entity(requestInputStream, edmEntityType); Entity requestEntity = result.getEntity(); // 2.2 do the creation in backend, which returns the newly created entity Entity createdEntity = null; try { storage.beginTransaction(); createdEntity = storage.createEntityData(edmEntitySet, requestEntity, request.getRawBaseUri()); storage.commitTransaction(); } catch( ODataApplicationException e ) { storage.rollbackTransaction(); throw e; } // 3. serialize the response (we have to return the created entity) ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); EntitySerializerOptions options = EntitySerializerOptions.with().contextURL(contextUrl).build(); // expand and select currently not supported ODataSerializer serializer = odata.createSerializer(responseFormat); SerializerResult serializedResponse = serializer.entity(serviceMetadata, edmEntityType, createdEntity, options); //4. configure the response object response.setContent(serializedResponse.getContent()); response.setStatusCode(HttpStatusCode.CREATED.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 4
Source File: DemoEntityProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. retrieve the Entity Type List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // Note: only in our example we can assume that the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2. retrieve the data from backend List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); // 3. serialize EdmEntityType entityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).suffix(ContextURL.Suffix.ENTITY).build(); // expand and select currently not supported EntitySerializerOptions options = EntitySerializerOptions.with().contextURL(contextUrl).build(); ODataSerializer serializer = this.odata.createSerializer(responseFormat); SerializerResult serializerResult = serializer.entity(serviceMetadata, entityType, entity, options); InputStream entityStream = serializerResult.getContent(); //4. configure the response object response.setContent(entityStream); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 5
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st we have retrieve the requested EntitySet from the uriInfo object (representation of the parsed service URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); // in our example, the first segment is the EntitySet EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object EntityCollection entitySet = getData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // 4th: Now serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializedContent = serializer.entityCollection(serviceMetadata, edmEntityType, entitySet, opts); // Finally: configure the response object: set the body, headers and status code response.setContent(serializedContent.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 6
Source File: DemoBatchProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
@Override public void processBatch(final BatchFacade facade, final ODataRequest request, final ODataResponse response) throws ODataApplicationException, ODataLibraryException { // 1. Extract the boundary final String boundary = facade.extractBoundaryFromContentType(request.getHeader(HttpHeader.CONTENT_TYPE)); // 2. Prepare the batch options final BatchOptions options = BatchOptions.with().rawBaseUri(request.getRawBaseUri()) .rawServiceResolutionUri(request.getRawServiceResolutionUri()) .build(); // 3. Deserialize the batch request final List<BatchRequestPart> requestParts = odata.createFixedFormatDeserializer() .parseBatchRequest(request.getBody(), boundary, options); // 4. Execute the batch request parts final List<ODataResponsePart> responseParts = new ArrayList<ODataResponsePart>(); for (final BatchRequestPart part : requestParts) { responseParts.add(facade.handleBatchRequest(part)); } // 5. Create a new boundary for the response final String responseBoundary = "batch_" + UUID.randomUUID().toString(); // 6. Serialize the response content final InputStream responseContent = odata.createFixedFormatSerializer().batchResponse(responseParts, responseBoundary); // 7. Setup response response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.MULTIPART_MIXED + ";boundary=" + responseBoundary); response.setContent(responseContent); response.setStatusCode(HttpStatusCode.ACCEPTED.getStatusCode()); }
Example 7
Source File: DemoEntityProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void createEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat, ContentType responseFormat) throws ODataApplicationException, DeserializerException, SerializerException { // 1. Retrieve the entity type from the URI EdmEntitySet edmEntitySet = Util.getEdmEntitySet(uriInfo); EdmEntityType edmEntityType = edmEntitySet.getEntityType(); // 2. create the data in backend // 2.1. retrieve the payload from the POST request for the entity to create and deserialize it InputStream requestInputStream = request.getBody(); ODataDeserializer deserializer = this.odata.createDeserializer(requestFormat); DeserializerResult result = deserializer.entity(requestInputStream, edmEntityType); Entity requestEntity = result.getEntity(); // 2.2 do the creation in backend, which returns the newly created entity Entity createdEntity = storage.createEntityData(edmEntitySet, requestEntity); // 3. serialize the response (we have to return the created entity) ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); EntitySerializerOptions options = EntitySerializerOptions.with().contextURL(contextUrl).build(); // expand and select currently not supported ODataSerializer serializer = this.odata.createSerializer(responseFormat); SerializerResult serializedResponse = serializer.entity(serviceMetadata, edmEntityType, createdEntity, options); //4. configure the response object final String location = request.getRawBaseUri() + '/' + odata.createUriHelper().buildCanonicalURL(edmEntitySet, createdEntity); response.setHeader(HttpHeader.LOCATION, location); response.setContent(serializedResponse.getContent()); response.setStatusCode(HttpStatusCode.CREATED.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 8
Source File: DemoEntityProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. retrieve the Entity Type List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // Note: only in our example we can assume that the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2. retrieve the data from backend List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); // 3. serialize EdmEntityType entityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).suffix(ContextURL.Suffix.ENTITY).build(); // expand and select currently not supported EntitySerializerOptions options = EntitySerializerOptions.with().contextURL(contextUrl).build(); ODataSerializer serializer = this.odata.createSerializer(responseFormat); SerializerResult result = serializer.entity(serviceMetadata, entityType, entity, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 9
Source File: BatchResponseSerializerTest.java From olingo-odata4 with Apache License 2.0 | 5 votes |
@Test public void changeSetResponse() throws Exception { List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); ODataResponse response = new ODataResponse(); response.setHeader(HttpHeader.CONTENT_ID, "1"); response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); parts.add(new ODataResponsePart(Collections.singletonList(response), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(14, body.size()); assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 204 No Content" + CRLF, body.get(line++)); assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); }
Example 10
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult result = serializer.primitive(serviceMetadata, edmPropertyType, property, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }else{ // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 11
Source File: BatchResponseSerializerTest.java From olingo-odata4 with Apache License 2.0 | 4 votes |
@Test public void batchResponseUmlautsUtf8() throws Exception { List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.APPLICATION_JSON.toContentTypeString()); response.setContent(IOUtils.toInputStream("{\"name\":\"Wälter Winter\"}" + CRLF)); parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(24, body.size()); assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); assertEquals("Content-Type: application/json" + CRLF, body.get(line++)); assertEquals("Content-Length: 27" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("{\"name\":\"Wälter Winter\"}" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 204 No Content" + CRLF, body.get(line++)); assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); }
Example 12
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property // the last segment is the Property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult serializerResult = serializer.primitive(serviceMetadata, edmPropertyType, property, options); InputStream propertyStream = serializerResult.getContent(); //4. configure the response object response.setContent(propertyStream); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } else { // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 13
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult result = serializer.primitive(serviceMetadata, edmPropertyType, property, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }else{ // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 14
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); List<Entity> entityList = entityCollection.getEntities(); // 3rd apply $orderby OrderByOption orderByOption = uriInfo.getOrderByOption(); if (orderByOption != null) { List<OrderByItem> orderItemList = orderByOption.getOrders(); final OrderByItem orderByItem = orderItemList.get(0); // in our example we support only one Expression expression = orderByItem.getExpression(); if(expression instanceof Member){ UriInfoResource resourcePath = ((Member)expression).getResourcePath(); UriResource uriResource = resourcePath.getUriResourceParts().get(0); if (uriResource instanceof UriResourcePrimitiveProperty) { EdmProperty edmProperty = ((UriResourcePrimitiveProperty)uriResource).getProperty(); final String sortPropertyName = edmProperty.getName(); // do the sorting for the list of entities Collections.sort(entityList, new Comparator<Entity>() { // we delegate the sorting to the native sorter of Integer and String public int compare(Entity entity1, Entity entity2) { int compareResult = 0; if(sortPropertyName.equals("ID")){ Integer integer1 = (Integer) entity1.getProperty(sortPropertyName).getValue(); Integer integer2 = (Integer) entity2.getProperty(sortPropertyName).getValue(); compareResult = integer1.compareTo(integer2); }else{ String propertyValue1 = (String) entity1.getProperty(sortPropertyName).getValue(); String propertyValue2 = (String) entity2.getProperty(sortPropertyName).getValue(); compareResult = propertyValue1.compareTo(propertyValue2); } // if 'desc' is specified in the URI, change the order of the list if(orderByItem.isDescending()){ return - compareResult; // just convert the result to negative value to change the order } return compareResult; } }); } } } // 4th: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 5th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 15
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult serializerResult = serializer.primitive(serviceMetadata, edmPropertyType, property, options); InputStream propertyStream = serializerResult.getContent(); //4. configure the response object response.setContent(propertyStream); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } else { // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 16
Source File: TechnicalActionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
@Override public void processActionComplexCollection(final ODataRequest request, ODataResponse response, final UriInfo uriInfo, final ContentType requestFormat, final ContentType responseFormat) throws ODataApplicationException, ODataLibraryException { EdmAction action = null; Map<String, Parameter> parameters = null; Property property = null; final List<UriResource> resourcePaths = uriInfo.asUriInfoResource().getUriResourceParts(); if (resourcePaths.size() > 1) { if (resourcePaths.get(0) instanceof UriResourceEntitySet) { UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet entitySet = uriResourceEntitySet.getEntitySet(); action = ((UriResourceAction) resourcePaths.get(resourcePaths.size() - 1)) .getAction(); parameters = readParameters(action, request.getBody(), requestFormat); property = dataProvider.processBoundActionComplexCollection(action.getName(), parameters, entitySet, uriResourceEntitySet.getKeyPredicates()); } } else { action = ((UriResourceAction) resourcePaths.get(0)) .getAction(); parameters = readParameters(action, request.getBody(), requestFormat); property = dataProvider.processActionComplexCollection(action.getName(), parameters); } if (property == null || property.isNull()) { // Collection Propertys must never be null throw new ODataApplicationException("The action could not be executed.", HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT); } else if (property.asCollection().contains(null) && !action.getReturnType().isNullable()) { // Not nullable return type but array contains a null value throw new ODataApplicationException("The action could not be executed.", HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT); } final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn(); if (returnPreference == null || returnPreference == Return.REPRESENTATION) { final EdmComplexType type = (EdmComplexType) action.getReturnType().getType(); final ContextURL contextURL = ContextURL.with().type(type).asCollection().build(); final ComplexSerializerOptions options = ComplexSerializerOptions.with().contextURL(contextURL).build(); final SerializerResult result = odata.createSerializer(responseFormat).complexCollection(serviceMetadata, type, property, options); response.setContent(result.getContent()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); } else { response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } if (returnPreference != null) { response.setHeader(HttpHeader.PREFERENCE_APPLIED, PreferencesApplied.with().returnRepresentation(returnPreference).build().toValueString()); } }
Example 17
Source File: TechnicalActionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
@Override public void processActionComplex(final ODataRequest request, ODataResponse response, final UriInfo uriInfo, final ContentType requestFormat, final ContentType responseFormat) throws ODataApplicationException, ODataLibraryException { EdmAction action = null; Map<String, Parameter> parameters = null; Property property = null; final List<UriResource> resourcePaths = uriInfo.asUriInfoResource().getUriResourceParts(); if (resourcePaths.size() > 1) { if (resourcePaths.get(0) instanceof UriResourceEntitySet) { UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet entitySet = uriResourceEntitySet.getEntitySet(); action = ((UriResourceAction) resourcePaths.get(resourcePaths.size() - 1)) .getAction(); parameters = readParameters(action, request.getBody(), requestFormat); property = dataProvider.processBoundActionComplex(action.getName(), parameters, entitySet, uriResourceEntitySet.getKeyPredicates()); } } else { action = ((UriResourceAction) resourcePaths.get(0)) .getAction(); parameters = readParameters(action, request.getBody(), requestFormat); property = dataProvider.processActionComplex(action.getName(), parameters); } EdmComplexType type = (EdmComplexType) action.getReturnType().getType(); if (property == null || property.isNull()) { if (action.getReturnType().isNullable()) { response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } else { // Not nullable return type so we have to give back an Internal Server Error throw new ODataApplicationException("The action could not be executed.", HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ROOT); } } else { final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn(); if (returnPreference == null || returnPreference == Return.REPRESENTATION) { final ContextURL contextURL = ContextURL.with().type(type).build(); final ComplexSerializerOptions options = ComplexSerializerOptions.with().contextURL(contextURL).build(); final SerializerResult result = odata.createSerializer(responseFormat).complex(serviceMetadata, type, property, options); response.setContent(result.getContent()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); } else { response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } if (returnPreference != null) { response.setHeader(HttpHeader.PREFERENCE_APPLIED, PreferencesApplied.with().returnRepresentation(returnPreference).build().toValueString()); } } }
Example 18
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: apply System Query Options // modify the result set according to the query options, specified by the end user List<Entity> entityList = entityCollection.getEntities(); EntityCollection returnEntityCollection = new EntityCollection(); // handle $count: always return the original number of entities, without considering $top and $skip CountOption countOption = uriInfo.getCountOption(); if (countOption != null) { boolean isCount = countOption.getValue(); if (isCount) { returnEntityCollection.setCount(entityList.size()); } } // handle $skip SkipOption skipOption = uriInfo.getSkipOption(); if (skipOption != null) { int skipNumber = skipOption.getValue(); if (skipNumber >= 0) { if(skipNumber <= entityList.size()) { entityList = entityList.subList(skipNumber, entityList.size()); } else { // The client skipped all entities entityList.clear(); } } else { throw new ODataApplicationException("Invalid value for $skip", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT); } } // handle $top TopOption topOption = uriInfo.getTopOption(); if (topOption != null) { int topNumber = topOption.getValue(); if (topNumber >= 0) { if(topNumber <= entityList.size()) { entityList = entityList.subList(0, topNumber); } // else the client has requested more entities than available => return what we have } else { throw new ODataApplicationException("Invalid value for $top", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT); } } // after applying the system query options, create the EntityCollection based on the reduced list for (Entity entity : entityList) { returnEntityCollection.getEntities().add(entity); } // 4th: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().contextURL(contextUrl).id(id).count(countOption).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, returnEntityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 5th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 19
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st: retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: Check if filter system query option is provided and apply the expression if necessary FilterOption filterOption = uriInfo.getFilterOption(); if(filterOption != null) { // Apply $filter system query option try { List<Entity> entityList = entityCollection.getEntities(); Iterator<Entity> entityIterator = entityList.iterator(); // Evaluate the expression for each entity // If the expression is evaluated to "true", keep the entity otherwise remove it from the entityList while (entityIterator.hasNext()) { // To evaluate the the expression, create an instance of the Filter Expression Visitor and pass // the current entity to the constructor Entity currentEntity = entityIterator.next(); Expression filterExpression = filterOption.getExpression(); FilterExpressionVisitor expressionVisitor = new FilterExpressionVisitor(currentEntity); // Start evaluating the expression Object visitorResult = filterExpression.accept(expressionVisitor); // The result of the filter expression must be of type Edm.Boolean if(visitorResult instanceof Boolean) { if(!Boolean.TRUE.equals(visitorResult)) { // The expression evaluated to false (or null), so we have to remove the currentEntity from entityList entityIterator.remove(); } } else { throw new ODataApplicationException("A filter expression must evaulate to type Edm.Boolean", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ENGLISH); } } } catch (ExpressionVisitException e) { throw new ODataApplicationException("Exception in filter evaluation", HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ENGLISH); } } // 4th: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 5th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 20
Source File: BatchResponseSerializerTest.java From olingo-odata4 with Apache License 2.0 | 4 votes |
@Test public void batchResponseUmlautsIso() throws Exception { List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.create(ContentType.TEXT_PLAIN, ContentType.PARAMETER_CHARSET, CS_ISO_8859_1.name()) .toContentTypeString()); response.setContent(new ByteArrayInputStream(("Wälter Winter" + CRLF).getBytes(CS_ISO_8859_1))); parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(24, body.size()); assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); assertEquals("Content-Type: text/plain;charset=ISO-8859-1" + CRLF, body.get(line++)); assertEquals("Content-Length: 15" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("Wälter Winter" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 204 No Content" + CRLF, body.get(line++)); assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); }