You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/03/24 10:34:16 UTC

olingo-odata4 git commit: [OLINGO-603] new ActionVoidProcessor for actions with no return type

Repository: olingo-odata4
Updated Branches:
  refs/heads/master c8d49029f -> 926373bcd


[OLINGO-603] new ActionVoidProcessor for actions with no return type

Change-Id: Icc9d05bbc33f1449bc43fd1c82677cd0500ce00f

Signed-off-by: Christian Amend <ch...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/926373bc
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/926373bc
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/926373bc

Branch: refs/heads/master
Commit: 926373bcd497a5f28cf5a9b021eadacfa642c1eb
Parents: c8d4902
Author: Klaus Straubinger <kl...@sap.com>
Authored: Fri Mar 20 16:32:23 2015 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Mar 24 10:33:47 2015 +0100

----------------------------------------------------------------------
 .../ActionComplexCollectionProcessor.java       | 21 ++---
 .../api/processor/ActionComplexProcessor.java   | 25 +++--
 .../ActionEntityCollectionProcessor.java        | 23 +++--
 .../api/processor/ActionEntityProcessor.java    | 23 +++--
 .../ActionPrimitiveCollectionProcessor.java     | 19 ++--
 .../api/processor/ActionPrimitiveProcessor.java | 21 ++---
 .../api/processor/ActionVoidProcessor.java      | 43 +++++++++
 .../apache/olingo/server/core/ODataHandler.java | 97 ++++++++++----------
 .../server/core/uri/UriResourceActionImpl.java  | 11 +--
 .../processor/TechnicalEntityProcessor.java     | 12 ++-
 .../server/tecsvc/provider/ActionProvider.java  | 24 +++++
 .../tecsvc/provider/ContainerProvider.java      | 21 +++++
 .../server/tecsvc/provider/SchemaProvider.java  |  3 +
 .../olingo/server/core/ODataHandlerTest.java    | 16 +++-
 .../server/core/uri/UriResourceImplTest.java    |  6 ++
 .../core/uri/antlr/TestFullResourcePath.java    |  5 +
 16 files changed, 243 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
index 31c525f..5f0c663 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.uri.UriInfo;
 
 /**
- * Processor interface for handling an action import request which has a
- * return type of ComplexCollection.
+ * Processor interface for handling an action request with a return type of ComplexCollection.
  */
 public interface ActionComplexCollectionProcessor extends ComplexCollectionProcessor {
   /**
    * Process an action which has as return type a complex-type collection.
-   * @param request  OData request object containing raw HTTP information
-   * @param response OData response object for collecting response data
-   * @param uriInfo  information of a parsed OData URI
-   * @param requestFormat   content type of body sent with request
+   * @param request          OData request object containing raw HTTP information
+   * @param response         OData response object for collecting response data
+   * @param uriInfo          information about a parsed OData URI
+   * @param requestFormat    content type of body sent with request
    * @param responseFormat   requested content type after content negotiation
-   * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
-   * @throws org.apache.olingo.server.api.deserializer.DeserializerException     if deserialization failed
-   * @throws org.apache.olingo.server.api.serializer.SerializerException       if serialization failed
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   * @throws SerializerException       if serialization failed
    */
   void processActionComplexCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo,
-                                ContentType requestFormat, ContentType responseFormat)
-          throws ODataApplicationException, DeserializerException, SerializerException;
+      ContentType requestFormat, ContentType responseFormat)
+      throws ODataApplicationException, DeserializerException, SerializerException;
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
index 11e8345..3acec8d 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.uri.UriInfo;
 
 /**
- * Processor interface for handling an action import request which has a
- * return type of Complex.
+ * Processor interface for handling an action request with a return type of Complex.
  */
 public interface ActionComplexProcessor extends ComplexProcessor {
   /**
-   * Process an action which has as return type a complex-type.
-   * @param request  OData request object containing raw HTTP information
-   * @param response OData response object for collecting response data
-   * @param uriInfo  information of a parsed OData URI
-   * @param requestFormat   content type of body sent with request
+   * Process an action which has as return type a complex type.
+   * @param request          OData request object containing raw HTTP information
+   * @param response         OData response object for collecting response data
+   * @param uriInfo          information about a parsed OData URI
+   * @param requestFormat    content type of body sent with request
    * @param responseFormat   requested content type after content negotiation
-   * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
-   * @throws org.apache.olingo.server.api.deserializer.DeserializerException     if deserialization failed
-   * @throws org.apache.olingo.server.api.serializer.SerializerException       if serialization failed
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   * @throws SerializerException       if serialization failed
    */
-  void processActionComplex(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat,
-                      ContentType responseFormat)
-          throws ODataApplicationException, DeserializerException, SerializerException;
+  void processActionComplex(ODataRequest request, ODataResponse response, UriInfo uriInfo,
+      ContentType requestFormat, ContentType responseFormat)
+      throws ODataApplicationException, DeserializerException, SerializerException;
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
index edabfce..82d776a 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.uri.UriInfo;
 
 /**
- * Processor interface for handling an action import request which has a
- * return type of Entity Collection.
+ * Processor interface for handling an action request with a return type of Entity Collection.
  */
 public interface ActionEntityCollectionProcessor extends EntityCollectionProcessor {
   /**
    * Process an action which has as return type a collection of entities.
-   * @param request  OData request object containing raw HTTP information
-   * @param response OData response object for collecting response data
-   * @param uriInfo  information of a parsed OData URI
+   * @param request         OData request object containing raw HTTP information
+   * @param response        OData response object for collecting response data
+   * @param uriInfo         information of a parsed OData URI
    * @param requestFormat   content type of body sent with request
-   * @param responseFormat   requested content type after content negotiation
-   * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
-   * @throws org.apache.olingo.server.api.deserializer.DeserializerException     if deserialization failed
-   * @throws org.apache.olingo.server.api.serializer.SerializerException       if serialization failed
+   * @param responseFormat  requested content type after content negotiation
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   * @throws SerializerException       if serialization failed
    */
-  void processActionEntityCollection(ODataRequest request, ODataResponse response,
-                                     UriInfo uriInfo, ContentType  requestFormat, ContentType responseFormat)
-          throws ODataApplicationException, DeserializerException, SerializerException;
+  void processActionEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo,
+      ContentType requestFormat, ContentType responseFormat)
+      throws ODataApplicationException, DeserializerException, SerializerException;
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
index 8a2043e..ec564d2 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.uri.UriInfo;
 
 /**
- * Processor interface for handling an action import request which has a
- * return type of Entity.
+ * Processor interface for handling an action request with a return type of Entity.
  */
 public interface ActionEntityProcessor extends EntityProcessor {
   /**
    * Process an action which has as return type an entity.
-   * @param request  OData request object containing raw HTTP information
-   * @param response OData response object for collecting response data
-   * @param uriInfo  information of a parsed OData URI
-   * @param requestFormat   content type of body sent with request
+   * @param request          OData request object containing raw HTTP information
+   * @param response         OData response object for collecting response data
+   * @param uriInfo          information about a parsed OData URI
+   * @param requestFormat    content type of body sent with request
    * @param responseFormat   requested content type after content negotiation
-   * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
-   * @throws org.apache.olingo.server.api.deserializer.DeserializerException     if deserialization failed
-   * @throws org.apache.olingo.server.api.serializer.SerializerException       if serialization failed
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   * @throws SerializerException       if serialization failed
    */
-  void processActionEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat,
-                     ContentType responseFormat)
-          throws ODataApplicationException, DeserializerException, SerializerException;
+  void processActionEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo,
+      ContentType requestFormat, ContentType responseFormat)
+      throws ODataApplicationException, DeserializerException, SerializerException;
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
index 9fd7549..ace9ff9 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.uri.UriInfo;
 
 /**
- * Processor interface for handling an action import request which has a
- * return type of Primitive Collection.
+ * Processor interface for handling an action request with a return type of Primitive Collection.
  */
 public interface ActionPrimitiveCollectionProcessor extends PrimitiveCollectionProcessor {
   /**
    * Process an action which has as return type a primitive-type collection.
-   * @param request  OData request object containing raw HTTP information
-   * @param response OData response object for collecting response data
-   * @param uriInfo  information of a parsed OData URI
+   * @param request         OData request object containing raw HTTP information
+   * @param response        OData response object for collecting response data
+   * @param uriInfo         information about a parsed OData URI
    * @param requestFormat   content type of body sent with request
    * @param responseFormat   requested content type after content negotiation
-   * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
-   * @throws org.apache.olingo.server.api.deserializer.DeserializerException     if deserialization failed
-   * @throws org.apache.olingo.server.api.serializer.SerializerException       if serialization failed
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   * @throws SerializerException       if serialization failed
    */
   void processActionPrimitiveCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo,
-                                ContentType requestFormat, ContentType responseFormat)
-          throws ODataApplicationException, DeserializerException, SerializerException;
+      ContentType requestFormat, ContentType responseFormat)
+      throws ODataApplicationException, DeserializerException, SerializerException;
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
index 362621b..8c11eb7 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.uri.UriInfo;
 
 /**
- * Processor interface for handling an action import request which has a
- * return type of Primitive.
+ * Processor interface for handling an action request with a return type of Primitive.
  */
 public interface ActionPrimitiveProcessor extends PrimitiveProcessor {
   /**
    * Process an action which has as return type a primitive-type.
-   * @param request  OData request object containing raw HTTP information
-   * @param response OData response object for collecting response data
-   * @param uriInfo  information of a parsed OData URI
+   * @param request         OData request object containing raw HTTP information
+   * @param response        OData response object for collecting response data
+   * @param uriInfo         information about a parsed OData URI
    * @param requestFormat   content type of body sent with request
-   * @param responseFormat   requested content type after content negotiation
-   * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
-   * @throws org.apache.olingo.server.api.deserializer.DeserializerException     if deserialization failed
-   * @throws org.apache.olingo.server.api.serializer.SerializerException       if serialization failed
+   * @param responseFormat  requested content type after content negotiation
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   * @throws SerializerException       if serialization failed
    */
   void processActionPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo,
-                        ContentType requestFormat, ContentType responseFormat)
-          throws ODataApplicationException, DeserializerException, SerializerException;
+      ContentType requestFormat, ContentType responseFormat)
+      throws ODataApplicationException, DeserializerException, SerializerException;
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java
new file mode 100644
index 0000000..2798132
--- /dev/null
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.api.processor;
+
+import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.server.api.ODataApplicationException;
+import org.apache.olingo.server.api.ODataRequest;
+import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.deserializer.DeserializerException;
+import org.apache.olingo.server.api.uri.UriInfo;
+
+/**
+ * Processor interface for handling an action request with no return type.
+ */
+public interface ActionVoidProcessor extends Processor {
+  /**
+   * Process an action which has no return type.
+   * @param request        OData request object containing raw HTTP information
+   * @param response       OData response object for collecting response data
+   * @param uriInfo        information about a parsed OData URI
+   * @param requestFormat  content type of body sent with request
+   * @throws ODataApplicationException if the service implementation encounters a failure
+   * @throws DeserializerException     if deserialization failed
+   */
+  void processActionVoid(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat)
+      throws ODataApplicationException, DeserializerException;
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
index bafc231..6d98b5e 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
@@ -22,7 +22,6 @@ import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
@@ -49,6 +48,7 @@ import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
 import org.apache.olingo.server.api.processor.ActionEntityProcessor;
 import org.apache.olingo.server.api.processor.ActionPrimitiveCollectionProcessor;
 import org.apache.olingo.server.api.processor.ActionPrimitiveProcessor;
+import org.apache.olingo.server.api.processor.ActionVoidProcessor;
 import org.apache.olingo.server.api.processor.BatchProcessor;
 import org.apache.olingo.server.api.processor.ComplexCollectionProcessor;
 import org.apache.olingo.server.api.processor.ComplexProcessor;
@@ -318,20 +318,20 @@ public class ODataHandler {
           ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
     }
 
-    EdmActionImport actionImport = uriResourceAction.getActionImport();
-    // could be null for bound actions
-    if (actionImport == null) {
-      throw new ODataHandlerException("Bound actions are not implemented yet",
+    final EdmAction action = uriResourceAction.getAction();
+    if (action == null) {
+      throw new ODataHandlerException("No action defined for action import.",
           ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
     }
-
-    EdmAction unboundActions = actionImport.getUnboundAction();
-    if (unboundActions == null) {
-      throw new ODataHandlerException("No unbound function defined for function import",
-          ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
+    final EdmReturnType returnType = action.getReturnType();
+    if (returnType == null) {
+      final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
+      checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
+      selectProcessor(ActionVoidProcessor.class)
+          .processActionVoid(request, response, uriInfo, requestFormat);
+    } else {
+      handleOperationDispatching(request, response, true, returnType);
     }
-    EdmReturnType returnType = unboundActions.getReturnType();
-    handleOperationDispatching(request, response, true, returnType);
   }
 
   private void handleOperationDispatching(final ODataRequest request, final ODataResponse response,
@@ -460,42 +460,44 @@ public class ODataHandler {
     if (method == HttpMethod.GET) {
       final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
           request, customContentTypeSupport, complexRepresentationType);
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ComplexProcessor.class)
-            .readComplex(request, response, uriInfo, requestedContentType);
-      } else {
+      if (isCollection) {
         selectProcessor(ComplexCollectionProcessor.class)
             .readComplexCollection(request, response, uriInfo, requestedContentType);
+      } else {
+        selectProcessor(ComplexProcessor.class)
+            .readComplex(request, response, uriInfo, requestedContentType);
       }
     } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
       final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
       checkContentTypeSupport(requestFormat, complexRepresentationType);
       final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
           request, customContentTypeSupport, complexRepresentationType);
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ComplexProcessor.class)
-            .updateComplex(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
+      if (isCollection) {
         selectProcessor(ComplexCollectionProcessor.class)
             .updateComplexCollection(request, response, uriInfo, requestFormat, responseFormat);
+      } else {
+        selectProcessor(ComplexProcessor.class)
+            .updateComplex(request, response, uriInfo, requestFormat, responseFormat);
       }
     } else if (method == HttpMethod.POST && isAction) {
       final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-      checkContentTypeSupport(requestFormat, complexRepresentationType);
+      checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
       final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
           request, customContentTypeSupport, complexRepresentationType);
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ActionComplexProcessor.class)
-            .processActionComplex(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
+      if (isCollection) {
         selectProcessor(ActionComplexCollectionProcessor.class)
             .processActionComplexCollection(request, response, uriInfo, requestFormat, responseFormat);
+      } else {
+        selectProcessor(ActionComplexProcessor.class)
+            .processActionComplex(request, response, uriInfo, requestFormat, responseFormat);
       }
     } else if (method == HttpMethod.DELETE) {
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ComplexProcessor.class).deleteComplex(request, response, uriInfo);
+      if (isCollection) {
+        selectProcessor(ComplexCollectionProcessor.class)
+            .deleteComplexCollection(request, response, uriInfo);
       } else {
-        selectProcessor(ComplexCollectionProcessor.class).deleteComplexCollection(request, response, uriInfo);
+        selectProcessor(ComplexProcessor.class)
+            .deleteComplex(request, response, uriInfo);
       }
     } else {
       throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
@@ -514,41 +516,44 @@ public class ODataHandler {
     if (method == HttpMethod.GET) {
       final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
           request, customContentTypeSupport, representationType);
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(PrimitiveProcessor.class).readPrimitive(request, response, uriInfo, requestedContentType);
-      } else {
+      if (isCollection) {
         selectProcessor(PrimitiveCollectionProcessor.class)
             .readPrimitiveCollection(request, response, uriInfo, requestedContentType);
+      } else {
+        selectProcessor(PrimitiveProcessor.class)
+            .readPrimitive(request, response, uriInfo, requestedContentType);
       }
     } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
       final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
       checkContentTypeSupport(requestFormat, representationType);
       final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
           request, customContentTypeSupport, representationType);
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(PrimitiveProcessor.class)
-            .updatePrimitive(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
+      if (isCollection) {
         selectProcessor(PrimitiveCollectionProcessor.class)
             .updatePrimitiveCollection(request, response, uriInfo, requestFormat, responseFormat);
+      } else {
+        selectProcessor(PrimitiveProcessor.class)
+            .updatePrimitive(request, response, uriInfo, requestFormat, responseFormat);
       }
     } else if (method == HttpMethod.DELETE) {
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(PrimitiveProcessor.class).deletePrimitive(request, response, uriInfo);
+      if (isCollection) {
+        selectProcessor(PrimitiveCollectionProcessor.class)
+            .deletePrimitiveCollection(request, response, uriInfo);
       } else {
-        selectProcessor(PrimitiveCollectionProcessor.class).deletePrimitiveCollection(request, response, uriInfo);
+        selectProcessor(PrimitiveProcessor.class)
+            .deletePrimitive(request, response, uriInfo);
       }
     } else if (method == HttpMethod.POST && isAction) {
       final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-      checkContentTypeSupport(requestFormat, representationType);
+      checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
       final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
           request, customContentTypeSupport, representationType);
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(ActionPrimitiveProcessor.class)
-            .processActionPrimitive(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
+      if (isCollection) {
         selectProcessor(ActionPrimitiveCollectionProcessor.class)
             .processActionPrimitiveCollection(request, response, uriInfo, requestFormat, responseFormat);
+      } else {
+        selectProcessor(ActionPrimitiveProcessor.class)
+            .processActionPrimitive(request, response, uriInfo, requestFormat, responseFormat);
       }
     } else {
       throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
@@ -612,9 +617,9 @@ public class ODataHandler {
           selectProcessor(MediaEntityProcessor.class)
               .createMediaEntity(request, response, uriInfo, requestFormat, responseFormat);
         } else if (isAction) {
-          checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
+          checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
           final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, RepresentationType.ENTITY);
+              request, customContentTypeSupport, RepresentationType.COLLECTION_ENTITY);
           selectProcessor(ActionEntityCollectionProcessor.class)
               .processActionEntityCollection(request, response, uriInfo, requestFormat, responseFormat);
         } else {
@@ -642,7 +647,7 @@ public class ODataHandler {
         selectProcessor(EntityProcessor.class).updateEntity(request, response, uriInfo, requestFormat, responseFormat);
       } else if (method == HttpMethod.POST && isAction) {
         final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
+        checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
         final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
             request, customContentTypeSupport, RepresentationType.ENTITY);
         selectProcessor(ActionEntityProcessor.class).processActionEntity(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
index 4ca162c..82fe743 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
@@ -56,22 +56,17 @@ public class UriResourceActionImpl extends UriResourceTypedImpl implements UriRe
 
   @Override
   public boolean isCollection() {
-    return action.getReturnType().isCollection();
+    return action.getReturnType() !=null && action.getReturnType().isCollection();
   }
 
   @Override
   public EdmType getType() {
-    return action.getReturnType().getType();
+    return action.getReturnType() == null ? null : action.getReturnType().getType();
   }
 
   @Override
   public String toString() {
-    if (actionImport != null) {
-      return actionImport.getName();
-    } else if (action != null) {
-      return action.getName();
-    }
-    return "";
+    return actionImport == null ? (action == null ? "" : action.getName()) : actionImport.getName();
   }
 
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index b66482a..ff7bd5f 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -41,6 +41,7 @@ import org.apache.olingo.server.api.deserializer.DeserializerException;
 import org.apache.olingo.server.api.deserializer.ODataDeserializer;
 import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
 import org.apache.olingo.server.api.processor.ActionEntityProcessor;
+import org.apache.olingo.server.api.processor.ActionVoidProcessor;
 import org.apache.olingo.server.api.processor.CountEntityCollectionProcessor;
 import org.apache.olingo.server.api.processor.EntityCollectionProcessor;
 import org.apache.olingo.server.api.processor.EntityProcessor;
@@ -68,7 +69,8 @@ import org.apache.olingo.server.tecsvc.processor.queryoptions.options.TopHandler
  */
 public class TechnicalEntityProcessor extends TechnicalProcessor
     implements EntityCollectionProcessor, ActionEntityCollectionProcessor, CountEntityCollectionProcessor,
-    EntityProcessor, ActionEntityProcessor, MediaEntityProcessor {
+    EntityProcessor, ActionEntityProcessor, MediaEntityProcessor,
+    ActionVoidProcessor {
 
   public TechnicalEntityProcessor(final DataProvider dataProvider) {
     super(dataProvider);
@@ -271,13 +273,19 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
   }
 
   @Override
-  public void processActionEntity(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo,
+  public void processActionEntity(final ODataRequest request, ODataResponse response, final UriInfo uriInfo,
       final ContentType requestFormat, final ContentType responseFormat)
       throws ODataApplicationException, DeserializerException, SerializerException {
     throw new ODataApplicationException("Process entity is not supported yet.",
         HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT);
   }
 
+  @Override
+  public void processActionVoid(final ODataRequest request, ODataResponse response, final UriInfo uriInfo,
+      final ContentType requestFormat) throws ODataApplicationException, DeserializerException {
+    response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode());
+  }
+
   private void setCount(EntitySet entitySet) {
     if (entitySet.getCount() == null) {
       entitySet.setCount(entitySet.getEntities().size());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
index 9226e13..78ada0a 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.server.tecsvc.provider;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.olingo.commons.api.ODataException;
@@ -62,6 +63,11 @@ public class ActionProvider {
           new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTETAllPrimParam");
   public static final FullQualifiedName nameUARTCollETAllPrimParam =
       new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTCollETAllPrimParam");
+  public static final FullQualifiedName nameUART = new FullQualifiedName(SchemaProvider.NAMESPACE, "UART");
+  public static final FullQualifiedName nameUARTParam =
+      new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTParam");
+  public static final FullQualifiedName nameUARTTwoParam =
+      new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTTwoParam");
 
 
   public List<Action> getActions(final FullQualifiedName actionName) throws ODataException {
@@ -132,6 +138,24 @@ public class ActionProvider {
                                   new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true))
       );
 
+    } else if (actionName.equals(nameUART)) {
+      return Collections.singletonList(new Action().setName(nameUART.getName()));
+
+    } else if (actionName.equals(nameUARTParam)) {
+      return Collections.singletonList(
+          new Action()
+              .setName(nameUARTParam.getName())
+              .setParameters(Collections.singletonList(
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16))));
+
+    } else if (actionName.equals(nameUARTTwoParam)) {
+      return Collections.singletonList(
+          new Action()
+              .setName(nameUARTTwoParam.getName())
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16),
+                  new Parameter().setName("ParameterDuration").setType(PropertyProvider.nameDuration))));
+
     } else if (actionName.equals(nameBAETTwoKeyNavRTETTwoKeyNav)) {
       return Arrays.asList(
           new Action().setName("BAETTwoKeyNavRTETTwoKeyNav")

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
index aa8b60a..3882705 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
@@ -44,6 +44,9 @@ public class ContainerProvider {
   public static final String AIRT_COLL_ET_KEY_NAV_PARAM = "AIRTCollETKeyNavParam";
   public static final String AIRTES_ALL_PRIM_PARAM = "AIRTESAllPrimParam";
   public static final String AIRT_COLL_ES_ALL_PRIM_PARAM = "AIRTCollESAllPrimParam";
+  public static final String AIRT = "AIRT";
+  public static final String AIRT_PARAM = "AIRTParam";
+  public static final String AIRT_TWO_PARAM = "AIRTTwoParam";
 
   EntityContainerInfo entityContainerInfoTest1 =
       new EntityContainerInfo().setContainerName(nameContainer);
@@ -115,6 +118,9 @@ public class ContainerProvider {
     actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_COLL_ET_KEY_NAV_PARAM));
     actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRTES_ALL_PRIM_PARAM));
     actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_COLL_ES_ALL_PRIM_PARAM));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_PARAM));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_TWO_PARAM));
 
     // FunctionImports
     List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
@@ -434,6 +440,21 @@ public class ContainerProvider {
         return new ActionImport()
             .setName(AIRT_COLL_ES_ALL_PRIM_PARAM)
             .setAction(ActionProvider.nameUARTCollETAllPrimParam);
+
+      } else if (name.equals(AIRT)) {
+        return new ActionImport()
+            .setName(AIRT)
+            .setAction(ActionProvider.nameUART);
+
+      } else if (name.equals(AIRT_PARAM)) {
+        return new ActionImport()
+            .setName(AIRT_PARAM)
+            .setAction(ActionProvider.nameUARTParam);
+
+      } else if (name.equals(AIRT_TWO_PARAM)) {
+        return new ActionImport()
+            .setName(AIRT_TWO_PARAM)
+            .setAction(ActionProvider.nameUARTTwoParam);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
index 04e5060..057f4c9 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
@@ -120,6 +120,9 @@ public class SchemaProvider {
     actions.addAll(prov.getActions(ActionProvider.nameUARTCollETKeyNavParam));
     actions.addAll(prov.getActions(ActionProvider.nameUARTETAllPrimParam));
     actions.addAll(prov.getActions(ActionProvider.nameUARTCollETAllPrimParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUART));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTTwoParam));
 
     // Functions
     List<Function> functions = new ArrayList<Function>();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
index 5424fda..45728e1 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
@@ -60,6 +60,7 @@ import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
 import org.apache.olingo.server.api.processor.ActionEntityProcessor;
 import org.apache.olingo.server.api.processor.ActionPrimitiveCollectionProcessor;
 import org.apache.olingo.server.api.processor.ActionPrimitiveProcessor;
+import org.apache.olingo.server.api.processor.ActionVoidProcessor;
 import org.apache.olingo.server.api.processor.BatchProcessor;
 import org.apache.olingo.server.api.processor.ComplexCollectionProcessor;
 import org.apache.olingo.server.api.processor.ComplexProcessor;
@@ -381,11 +382,15 @@ public class ODataHandlerTest {
 
   @Test
   public void dispatchAction() throws Exception {
-    ActionPrimitiveProcessor primitiveProcessor = mock(ActionPrimitiveProcessor.class);
+    final ActionPrimitiveProcessor primitiveProcessor = mock(ActionPrimitiveProcessor.class);
     dispatch(HttpMethod.POST, ContainerProvider.AIRT_STRING, primitiveProcessor);
     verify(primitiveProcessor).processActionPrimitive(
         any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class),
         any(ContentType.class), any(ContentType.class));
+    dispatchMethodNotAllowed(HttpMethod.GET, ContainerProvider.AIRT_STRING, primitiveProcessor);
+    dispatchMethodNotAllowed(HttpMethod.PATCH, ContainerProvider.AIRT_STRING, primitiveProcessor);
+    dispatchMethodNotAllowed(HttpMethod.PUT, ContainerProvider.AIRT_STRING, primitiveProcessor);
+    dispatchMethodNotAllowed(HttpMethod.DELETE, ContainerProvider.AIRT_STRING, primitiveProcessor);
 
     ActionPrimitiveCollectionProcessor primitiveCollectionProcessor = mock(ActionPrimitiveCollectionProcessor.class);
     dispatch(HttpMethod.POST, ContainerProvider.AIRT_COLL_STRING_TWO_PARAM, primitiveCollectionProcessor);
@@ -429,7 +434,14 @@ public class ODataHandlerTest {
         any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class),
         any(ContentType.class), any(ContentType.class));
 
-    dispatchMethodNotAllowed(HttpMethod.GET, "AIRTString", mock(Processor.class));
+    final ActionVoidProcessor voidProcessor = mock(ActionVoidProcessor.class);
+    dispatch(HttpMethod.POST, ContainerProvider.AIRT, voidProcessor);
+    verify(voidProcessor).processActionVoid(
+        any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class));
+    dispatchMethodNotAllowed(HttpMethod.GET, ContainerProvider.AIRT, voidProcessor);
+    dispatchMethodNotAllowed(HttpMethod.PATCH, ContainerProvider.AIRT, voidProcessor);
+    dispatchMethodNotAllowed(HttpMethod.PUT, ContainerProvider.AIRT, voidProcessor);
+    dispatchMethodNotAllowed(HttpMethod.DELETE, ContainerProvider.AIRT, voidProcessor);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
index 6c72a0f..ab197e7 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
@@ -48,6 +48,7 @@ import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 public class UriResourceImplTest {
 
@@ -90,6 +91,11 @@ public class UriResourceImplTest {
     assertEquals(false, impl.isCollection());
     assertEquals("AIRTCTTwoPrimParam", impl.toString());
     assertEquals(actionImport.getUnboundAction().getReturnType().getType(), impl.getType());
+
+    actionImport = edm.getEntityContainer(null).getActionImport("AIRT");
+    impl.setActionImport(actionImport);
+    assertEquals(false, impl.isCollection());
+    assertNull(impl.getType());
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
index 6019218..3ace90e 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
@@ -2728,6 +2728,11 @@ public class TestFullResourcePath {
         .goPath().first()
         .isActionImport(ContainerProvider.AIRT_COLL_ES_ALL_PRIM_PARAM);
 
+    testUri.run(ContainerProvider.AIRT)
+        .isKind(UriInfoKind.resource)
+        .goPath().first()
+        .isActionImport(ContainerProvider.AIRT);
+
     testUri.run("ESKeyNav/$count")
         .isKind(UriInfoKind.resource)
         .goPath().first()