You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/11/28 06:30:31 UTC

[23/47] olingo-odata4 git commit: [OLINGO-801] support for non-primitive function parameters

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/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 16ec8ba..5a4ee5b 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
@@ -19,43 +19,39 @@
 package org.apache.olingo.server.tecsvc.provider;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-import org.apache.olingo.commons.api.ex.ODataException;
 import org.apache.olingo.commons.api.edm.provider.CsdlAction;
 import org.apache.olingo.commons.api.edm.provider.CsdlComplexType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
 import org.apache.olingo.commons.api.edm.provider.CsdlEntityType;
-import org.apache.olingo.commons.api.edm.provider.CsdlEnumType;
 import org.apache.olingo.commons.api.edm.provider.CsdlFunction;
 import org.apache.olingo.commons.api.edm.provider.CsdlSchema;
-import org.apache.olingo.commons.api.edm.provider.CsdlTypeDefinition;
+import org.apache.olingo.commons.api.ex.ODataException;
 
 public class SchemaProvider {
 
-  private EdmTechProvider prov;
-
   public static final String NAMESPACE = "olingo.odata.test1";
 
+  private final CsdlEdmProvider prov;
+
   public SchemaProvider(final EdmTechProvider prov) {
     this.prov = prov;
   }
 
   public List<CsdlSchema> getSchemas() throws ODataException {
-    List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
     CsdlSchema schema = new CsdlSchema();
     schema.setNamespace(NAMESPACE);
     schema.setAlias("Namespace1_Alias");
-    schemas.add(schema);
 
     // EnumTypes
-    List<CsdlEnumType> enumTypes = new ArrayList<CsdlEnumType>();
-    schema.setEnumTypes(enumTypes);
+    schema.setEnumTypes(Collections.singletonList(
+        prov.getEnumType(EnumTypeProvider.nameENString)));
 
     // TypeDefinitions
-    List<CsdlTypeDefinition> typeDefinitions = new ArrayList<CsdlTypeDefinition>();
-    schema.setTypeDefinitions(typeDefinitions);
-    typeDefinitions.add(prov.getTypeDefinition(TypeDefinitionProvider.nameTDString));
-    enumTypes.add(prov.getEnumType(EnumTypeProvider.nameENString));
+    schema.setTypeDefinitions(Collections.singletonList(
+        prov.getTypeDefinition(TypeDefinitionProvider.nameTDString)));
 
     // EntityTypes
     List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>();
@@ -89,24 +85,24 @@ public class SchemaProvider {
     entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETAbstractBase));
 
     // ComplexTypes
-    List<CsdlComplexType> complexType = new ArrayList<CsdlComplexType>();
-    schema.setComplexTypes(complexType);
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrim));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTAllPrim));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCollAllPrim));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoPrim));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTMixPrimCollComp));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTMixEnumDef));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTBase));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBase));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompComp));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompCollComp));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrimComp));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTNavFiveProp));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTBasePrimCompNav));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBasePrimCompNav));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompNav));
-    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTNavCont));
+    List<CsdlComplexType> complexTypes = new ArrayList<CsdlComplexType>();
+    schema.setComplexTypes(complexTypes);
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTPrim));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTAllPrim));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTCollAllPrim));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoPrim));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTMixPrimCollComp));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTMixEnumDef));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTBase));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBase));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTCompComp));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTCompCollComp));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTPrimComp));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTNavFiveProp));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTBasePrimCompNav));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBasePrimCompNav));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTCompNav));
+    complexTypes.add(prov.getComplexType(ComplexTypeProvider.nameCTNavCont));
 
     // Actions
     List<CsdlAction> actions = new ArrayList<CsdlAction>();
@@ -158,6 +154,7 @@ public class SchemaProvider {
     functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCollETMixPrimCollCompTwoParam));
     functions.addAll(prov.getFunctions(FunctionProvider.nameUFNRTCollCTNavFiveProp));
     functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCollETKeyNavContParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFNRTByteNineParam));
 
     functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTESTwoKeyNav));
     functions.addAll(prov.getFunctions(FunctionProvider.nameBFCStringRTESTwoKeyNav));
@@ -195,7 +192,7 @@ public class SchemaProvider {
     // EntityContainer
     schema.setEntityContainer(prov.getEntityContainer());
 
-    return schemas;
+    return Collections.singletonList(schema);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerFunctionParametersTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerFunctionParametersTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerFunctionParametersTest.java
new file mode 100644
index 0000000..7460e2a
--- /dev/null
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerFunctionParametersTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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.core.deserializer.json;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.List;
+
+import org.apache.olingo.commons.api.data.Parameter;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.deserializer.DeserializerException;
+import org.apache.olingo.server.api.deserializer.DeserializerException.MessageKeys;
+import org.apache.olingo.server.core.deserializer.AbstractODataDeserializerTest;
+import org.junit.Test;
+
+public class ODataJsonDeserializerFunctionParametersTest extends AbstractODataDeserializerTest {
+
+  @Test
+  public void empty() throws Exception {
+    final Parameter parameter = deserialize("{}", "UFCRTETTwoKeyNavParamCTTwoPrim", "ParameterCTTwoPrim");
+    assertNotNull(parameter);
+    assertTrue(parameter.isComplex());
+  }
+
+  @Test
+  public void primitive() throws Exception {
+    final Parameter parameter = deserialize("'test'", "UFCRTCollStringTwoParam", "ParameterString");
+    assertNotNull(parameter);
+    assertTrue(parameter.isPrimitive());
+    assertFalse(parameter.isCollection());
+    assertEquals("test", parameter.getValue());
+  }
+
+  @Test
+  public void complex() throws Exception {
+    final Parameter parameter = deserialize("{ \"PropertyString\": \"Yes\", \"PropertyInt16\": 42 }",
+        "UFCRTETTwoKeyNavParamCTTwoPrim", "ParameterCTTwoPrim");
+    assertNotNull(parameter);
+    assertTrue(parameter.isComplex());
+    assertFalse(parameter.isCollection());
+    final List<Property> complexValues = parameter.asComplex().getValue();
+    assertEquals((short) 42, complexValues.get(0).getValue());
+    assertEquals("Yes", complexValues.get(1).getValue());
+  }
+
+  @Test
+  public void ignoreODataAnnotations() throws Exception {
+    final Parameter parameter = deserialize("{\"PropertyInt16@odata.type\":\"Edm.Int16\",\"PropertyInt16\":42,"
+        + "\"PropertyString\":\"Test\"}",
+        "UFCRTETTwoKeyNavParamCTTwoPrim", "ParameterCTTwoPrim");
+    assertNotNull(parameter);
+    assertTrue(parameter.isComplex());
+    assertFalse(parameter.isCollection());
+    final List<Property> complexValues = parameter.asComplex().getValue();
+    assertEquals((short) 42, complexValues.get(0).getValue());
+    assertEquals("Test", complexValues.get(1).getValue());
+  }
+
+  @Test
+  public void parameterWithNullLiteral() throws Exception {
+    final Parameter parameter = deserialize(null, "UFCRTCollCTTwoPrimTwoParam", "ParameterString");
+    assertNotNull(parameter);
+    assertEquals(null, parameter.getValue());
+
+    expectException(null, "UFCRTStringTwoParam", "ParameterInt16", MessageKeys.INVALID_VALUE_FOR_PROPERTY);
+  }
+
+  @Test
+  public void noContent() throws Exception {
+    expectException("", "UFCRTETTwoKeyNavParamCTTwoPrim", "ParameterCTTwoPrim", MessageKeys.JSON_SYNTAX_EXCEPTION);
+  }
+
+  @Test
+  public void wrongType() throws Exception {
+    expectException("null", "UFCRTStringTwoParam", "ParameterInt16", MessageKeys.INVALID_VALUE_FOR_PROPERTY);
+    expectException("\"42\"", "UFCRTStringTwoParam", "ParameterInt16", MessageKeys.INVALID_VALUE_FOR_PROPERTY);
+    expectException("'42'", "UFCRTStringTwoParam", "ParameterInt16", MessageKeys.INVALID_VALUE_FOR_PROPERTY);
+    expectException("123456", "UFCRTStringTwoParam", "ParameterInt16", MessageKeys.INVALID_VALUE_FOR_PROPERTY);
+    expectException("[42]", "UFCRTStringTwoParam", "ParameterInt16", MessageKeys.INVALID_VALUE_FOR_PROPERTY);
+  }
+
+  private Parameter deserialize(final String input, final String functionName, final String parameterName)
+      throws DeserializerException {
+    return OData.newInstance().createFixedFormatDeserializer()
+        .parameter(input,
+            edm.getUnboundFunctions(new FullQualifiedName(NAMESPACE, functionName)).get(0)
+                .getParameter(parameterName));
+  }
+
+  private void expectException(final String input, final String functionName, final String parameterName,
+      final DeserializerException.MessageKeys messageKey) {
+    try {
+      deserialize(input, functionName, parameterName);
+      fail("Expected exception not thrown.");
+    } catch (final DeserializerException e) {
+      assertEquals(messageKey, e.getMessageKey());
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java
index 2a46711..12a5edc 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentTest.java
@@ -80,7 +80,7 @@ public class ServiceDocumentTest {
     assertTrue(jsonString.contains("FunctionImport"));
 
     assertTrue(jsonString.contains("SI"));
-    assertTrue(jsonString.contains("Simple Singelton"));
+    assertTrue(jsonString.contains("Simple Singleton"));
     assertTrue(jsonString.contains("SINav"));
     assertTrue(jsonString.contains("SIMedia"));
     assertTrue(jsonString.contains("Singleton"));

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
index dc90901..20bdade 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
@@ -18,27 +18,27 @@
  */
 package org.apache.olingo.server.core.uri;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.ex.ODataRuntimeException;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.edmx.EdmxReference;
-import org.apache.olingo.server.api.uri.UriInfoAll;
-import org.apache.olingo.server.api.uri.UriInfoBatch;
-import org.apache.olingo.server.api.uri.UriInfoCrossjoin;
-import org.apache.olingo.server.api.uri.UriInfoEntityId;
+import org.apache.olingo.server.api.uri.UriInfo;
 import org.apache.olingo.server.api.uri.UriInfoKind;
-import org.apache.olingo.server.api.uri.UriInfoMetadata;
-import org.apache.olingo.server.api.uri.UriInfoResource;
-import org.apache.olingo.server.api.uri.UriInfoService;
-import org.apache.olingo.server.api.uri.queryoption.CustomQueryOption;
+import org.apache.olingo.server.api.uri.UriResourceAction;
+import org.apache.olingo.server.api.uri.UriResourceEntitySet;
+import org.apache.olingo.server.api.uri.queryoption.AliasQueryOption;
+import org.apache.olingo.server.api.uri.queryoption.QueryOption;
+import org.apache.olingo.server.core.uri.queryoption.AliasQueryOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.CountOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.CustomQueryOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.ExpandOptionImpl;
@@ -47,7 +47,6 @@ import org.apache.olingo.server.core.uri.queryoption.FormatOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.IdOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.LevelsOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.OrderByOptionImpl;
-import org.apache.olingo.server.core.uri.queryoption.QueryOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.SearchOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.SelectOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.SkipOptionImpl;
@@ -63,56 +62,39 @@ public class UriInfoImplTest {
       new EdmTechProvider(), Collections.<EdmxReference> emptyList()).getEdm();
 
   @Test
-  public void testKind() {
-    UriInfoImpl uriInfo = new UriInfoImpl().setKind(UriInfoKind.all);
+  public void kind() {
+    final UriInfo uriInfo = new UriInfoImpl().setKind(UriInfoKind.all);
     assertEquals(UriInfoKind.all, uriInfo.getKind());
   }
 
   @Test
-  public void testCasts() {
-    UriInfoImpl uriInfo = new UriInfoImpl();
-
-    UriInfoAll all = uriInfo.asUriInfoAll();
-    assertEquals(uriInfo, all);
-
-    UriInfoBatch batch = uriInfo.asUriInfoBatch();
-    assertEquals(uriInfo, batch);
-
-    UriInfoCrossjoin crossjoin = uriInfo.asUriInfoCrossjoin();
-    assertEquals(uriInfo, crossjoin);
-
-    UriInfoEntityId entityID = uriInfo.asUriInfoEntityId();
-    assertEquals(uriInfo, entityID);
-
-    UriInfoMetadata metadata = uriInfo.asUriInfoMetadata();
-    assertEquals(uriInfo, metadata);
-
-    UriInfoResource resource = uriInfo.asUriInfoResource();
-    assertEquals(uriInfo, resource);
-
-    UriInfoService service = uriInfo.asUriInfoService();
-    assertEquals(uriInfo, service);
-
+  public void casts() {
+    final UriInfo uriInfo = new UriInfoImpl();
+
+    assertEquals(uriInfo, uriInfo.asUriInfoAll());
+    assertEquals(uriInfo, uriInfo.asUriInfoBatch());
+    assertEquals(uriInfo, uriInfo.asUriInfoCrossjoin());
+    assertEquals(uriInfo, uriInfo.asUriInfoEntityId());
+    assertEquals(uriInfo, uriInfo.asUriInfoMetadata());
+    assertEquals(uriInfo, uriInfo.asUriInfoResource());
+    assertEquals(uriInfo, uriInfo.asUriInfoService());
   }
 
   @Test
-  public void testEntityNames() {
-    UriInfoImpl uriInfo = new UriInfoImpl();
-    uriInfo.addEntitySetName("A");
-    uriInfo.addEntitySetName("B");
-
-    assertEquals("A", uriInfo.getEntitySetNames().get(0));
-    assertEquals("B", uriInfo.getEntitySetNames().get(1));
-
+  public void entityNames() {
+    final UriInfo uriInfo = new UriInfoImpl()
+        .addEntitySetName("A")
+        .addEntitySetName("B");
+    assertArrayEquals(new String[] { "A", "B" }, uriInfo.getEntitySetNames().toArray());
   }
 
   @Test
-  public void testResourceParts() {
+  public void resourceParts() {
     UriInfoImpl uriInfo = new UriInfoImpl();
 
-    UriResourceActionImpl action = new UriResourceActionImpl();
-    UriResourceEntitySetImpl entitySet0 = new UriResourceEntitySetImpl();
-    UriResourceEntitySetImpl entitySet1 = new UriResourceEntitySetImpl();
+    final UriResourceAction action = new UriResourceActionImpl();
+    final UriResourceEntitySet entitySet0 = new UriResourceEntitySetImpl();
+    final UriResourceEntitySet entitySet1 = new UriResourceEntitySetImpl();
 
     uriInfo.addResourcePart(action);
     uriInfo.addResourcePart(entitySet0);
@@ -129,53 +111,52 @@ public class UriInfoImplTest {
   @Test(expected = ODataRuntimeException.class)
   public void doubleSystemQueryOptions() {
     new UriInfoImpl()
-    .setSystemQueryOption(new FormatOptionImpl())
-    .setSystemQueryOption(new FormatOptionImpl());
+        .setSystemQueryOption(new FormatOptionImpl())
+        .setSystemQueryOption(new FormatOptionImpl());
   }
 
   @Test
-  public void testCustomQueryOption() {
-    UriInfoImpl uriInfo = new UriInfoImpl();
-
-    List<QueryOptionImpl> queryOptions = new ArrayList<QueryOptionImpl>();
-
-    ExpandOptionImpl expand = new ExpandOptionImpl();
-    FilterOptionImpl filter = new FilterOptionImpl();
-    FormatOptionImpl format = new FormatOptionImpl();
-    IdOptionImpl id = new IdOptionImpl();
-    CountOptionImpl inlinecount = new CountOptionImpl();
-    OrderByOptionImpl orderby = new OrderByOptionImpl();
-    SearchOptionImpl search = new SearchOptionImpl();
-    SelectOptionImpl select = new SelectOptionImpl();
-    SkipOptionImpl skip = new SkipOptionImpl();
-    SkipTokenOptionImpl skipToken = new SkipTokenOptionImpl();
-    TopOptionImpl top = new TopOptionImpl();
-    LevelsOptionImpl levels = new LevelsOptionImpl();
-
-    CustomQueryOptionImpl customOption0 = new CustomQueryOptionImpl();
-    customOption0.setText("A");
-    CustomQueryOptionImpl customOption1 = new CustomQueryOptionImpl();
-    customOption1.setText("B");
-
-    QueryOptionImpl queryOption = new CustomQueryOptionImpl();
-
-    queryOptions.add(expand.setName(""));
-    queryOptions.add(filter.setName(""));
-    queryOptions.add(format.setName(""));
-    queryOptions.add(id.setName(""));
-    queryOptions.add(inlinecount.setName(""));
-    queryOptions.add(orderby.setName(""));
-    queryOptions.add(search.setName(""));
-    queryOptions.add(select.setName(""));
-    queryOptions.add(skip.setName(""));
-    queryOptions.add(skipToken.setName(""));
-    queryOptions.add(top.setName(""));
-    queryOptions.add(customOption0.setName(""));
-    queryOptions.add(customOption1.setName(""));
-    queryOptions.add(levels.setName(""));// not stored
-    queryOptions.add(queryOption.setName(""));// not stored
-    uriInfo.setQueryOptions(queryOptions);
-
+  public void customQueryOption() {
+    final QueryOption expand = new ExpandOptionImpl().setName("");
+    final QueryOption filter = new FilterOptionImpl().setName("");
+    final QueryOption format = new FormatOptionImpl().setName("");
+    final QueryOption id = new IdOptionImpl().setName("");
+    final QueryOption inlinecount = new CountOptionImpl().setName("");
+    final QueryOption orderby = new OrderByOptionImpl().setName("");
+    final QueryOption search = new SearchOptionImpl().setName("");
+    final QueryOption select = new SelectOptionImpl().setName("");
+    final QueryOption skip = new SkipOptionImpl().setName("");
+    final QueryOption skipToken = new SkipTokenOptionImpl().setName("");
+    final QueryOption top = new TopOptionImpl().setName("");
+    final QueryOption levels = new LevelsOptionImpl().setName("");
+
+    final QueryOption customOption0 = new CustomQueryOptionImpl().setName("").setText("A");
+    final QueryOption customOption1 = new CustomQueryOptionImpl().setName("").setText("B");
+
+    final QueryOption initialQueryOption = new CustomQueryOptionImpl();
+
+    final QueryOption alias = new AliasQueryOptionImpl().setName("alias").setText("C");
+
+    final UriInfo uriInfo = new UriInfoImpl()
+        .setQueryOptions(Arrays.asList(
+            expand,
+            filter,
+            format,
+            id,
+            inlinecount,
+            orderby,
+            search,
+            select,
+            skip,
+            skipToken,
+            top,
+            customOption0,
+            customOption1,
+            levels,
+            initialQueryOption,
+            alias));
+
+    assertEquals(12, uriInfo.getSystemQueryOptions().size());
     assertEquals(expand, uriInfo.getExpandOption());
     assertEquals(filter, uriInfo.getFilterOption());
     assertEquals(format, uriInfo.getFormatOption());
@@ -188,25 +169,44 @@ public class UriInfoImplTest {
     assertEquals(skipToken, uriInfo.getSkipTokenOption());
     assertEquals(top, uriInfo.getTopOption());
 
-    List<CustomQueryOption> customQueryOptions = uriInfo.getCustomQueryOptions();
-    assertEquals(customOption0, customQueryOptions.get(0));
-    assertEquals(customOption1, customQueryOptions.get(1));
+    assertArrayEquals(new QueryOption[] { alias }, uriInfo.getAliases().toArray());
+    assertEquals("C", uriInfo.getValueForAlias("alias"));
+
+    assertArrayEquals(new QueryOption[] { customOption0, customOption1, initialQueryOption },
+        uriInfo.getCustomQueryOptions().toArray());
   }
 
   @Test
-  public void testFragment() {
-    UriInfoImpl uriInfo = new UriInfoImpl();
-    uriInfo.setFragment("F");
+  public void fragment() {
+    final UriInfo uriInfo = new UriInfoImpl().setFragment("F");
     assertEquals("F", uriInfo.getFragment());
   }
 
   @Test
-  public void testEntityTypeCast() {
-    UriInfoImpl uriInfo = new UriInfoImpl();
-    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
+  public void entityTypeCast() {
+    final EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
     assertNotNull(entityType);
 
-    uriInfo.setEntityTypeCast(entityType);
+    final UriInfo uriInfo = new UriInfoImpl()
+        .setEntityTypeCast(entityType);
     assertEquals(entityType, uriInfo.getEntityTypeCast());
   }
+
+  @Test
+  public void alias() {
+    final UriInfo uriInfo = new UriInfoImpl()
+        .addAlias((AliasQueryOption) new AliasQueryOptionImpl().setName("A").setText("notUsed"))
+        .addAlias((AliasQueryOption) new AliasQueryOptionImpl().setName("A").setText("X"))
+        .addAlias((AliasQueryOption) new AliasQueryOptionImpl().setName("B").setText("Y"))
+        .addAlias((AliasQueryOption) new AliasQueryOptionImpl().setName("C").setText("Z"));
+
+    assertEquals(3, uriInfo.getAliases().size());
+    assertEquals("X", uriInfo.getValueForAlias("A"));
+    assertEquals("Y", uriInfo.getValueForAlias("B"));
+    assertEquals("Z", uriInfo.getValueForAlias("C"));
+    assertNull(uriInfo.getValueForAlias("D"));
+
+    assertTrue(uriInfo.getSystemQueryOptions().isEmpty());
+    assertTrue(uriInfo.getCustomQueryOptions().isEmpty());
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/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 fc48b9d..e0f5738 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
@@ -5527,13 +5527,11 @@ public class TestFullResourcePath {
   }
 
   @Test
-  public void testAlias() throws Exception {
+  public void alias() throws Exception {
     testUri.run("ESTwoKeyNav(PropertyInt16=1,PropertyString=@A)", "@A='2'").goPath()
         .isKeyPredicate(0, "PropertyInt16", "1")
         .isKeyPredicateAlias(1, "PropertyString", "@A")
-        .isInAliasToValueMap("@A", "'2'")
-        .goUpUriValidator()
-        .isCustomParameter(0, "@A", "'2'");
+        .isInAliasToValueMap("@A", "'2'");
   }
 
   @Test
@@ -5833,6 +5831,11 @@ public class TestFullResourcePath {
         + "(ParameterComp=@p1) eq 0&@p1={\"PropertyInt16\":[{\"Prop1\":123,\"Prop2\":\"Test\",\"Prop3\":[1,2,3]},"
         + "{\"Prop1\":{\"Prop1\":[\"Prop\\\":{]\"]}}],\"ProperyString\":\"1\"}");
 
+    testUri.run("FINRTByteNineParam(ParameterEnum=null,ParameterDef='x',ParameterComp=@c,"
+        + "ParameterETTwoPrim=@c,CollParameterByte=@e,CollParameterEnum=@e,CollParameterDef=@e,"
+        + "CollParameterComp=@e,CollParameterETTwoPrim=@e)",
+        "@c={}&@e=[]");
+
     testUri.runEx("ESTwoKeyNav/olingo.odata.test1.BFCESTwoKeyNavRTStringParam"
         + "(ParameterComp=@p1)", "@p1={\"PropertyInt16\":1,\"ProperyString\":'1'}")
         .isExSyntax(UriParserSyntaxException.MessageKeys.SYNTAX);