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/10/22 10:40:31 UTC

[48/48] olingo-odata4 git commit: Merge branch 'master' into olingo786

Merge branch 'master' into olingo786

Conflicts:
	lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java


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

Branch: refs/heads/master
Commit: 9f663baf5c3747e105dcbbfad46e0312f28f74ee
Parents: 9c53108 23fb86a
Author: Christian Amend <ch...@sap.com>
Authored: Thu Oct 22 10:28:23 2015 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Thu Oct 22 10:28:23 2015 +0200

----------------------------------------------------------------------
 .../tecsvc/client/FilterSystemQueryITCase.java  |   8 +-
 .../fit/tecsvc/client/FunctionImportITCase.java | 106 ++--
 .../commons/api/edm/EdmPrimitiveType.java       |   2 -
 .../commons/api/edm/EdmPrimitiveTypeKind.java   |  21 +-
 .../commons/core/edm/EdmEnumTypeImpl.java       |  13 +-
 .../commons/core/edm/primitivetype/EdmByte.java |   7 -
 .../core/edm/primitivetype/EdmDecimal.java      |   3 +-
 .../core/edm/primitivetype/EdmDouble.java       |   3 +-
 .../core/edm/primitivetype/EdmInt16.java        |   3 +-
 .../core/edm/primitivetype/EdmInt32.java        |   3 +-
 .../core/edm/primitivetype/EdmInt64.java        |   3 +-
 .../core/edm/primitivetype/EdmSByte.java        |   7 -
 .../core/edm/primitivetype/EdmSingle.java       |   3 +-
 .../commons/core/edm/primitivetype/Uint7.java   |  66 ---
 .../primitivetype/CommonPrimitiveTypeTest.java  | 107 ++--
 .../core/edm/primitivetype/EdmByteTest.java     |   6 -
 .../core/edm/primitivetype/EdmDecimalTest.java  |   1 -
 .../core/edm/primitivetype/EdmDoubleTest.java   |   1 -
 .../core/edm/primitivetype/EdmInt16Test.java    |   1 -
 .../core/edm/primitivetype/EdmInt32Test.java    |   1 -
 .../core/edm/primitivetype/EdmInt64Test.java    |   1 -
 .../core/edm/primitivetype/EdmSByteTest.java    |   6 -
 .../core/edm/primitivetype/EdmSingleTest.java   |   1 -
 .../core/edm/primitivetype/UInt7Test.java       |  35 --
 .../server/core/edm/provider/EdmEnumTest.java   | 117 ++---
 .../olingo/server/api/uri/UriParameter.java     |  10 +-
 .../deserializer/xml/ODataXmlDeserializer.java  |  27 +-
 .../xml/MetadataDocumentXmlSerializer.java      |   8 +-
 .../core/uri/parser/UriParseTreeVisitor.java    |  51 +-
 .../olingo/server/tecsvc/data/ActionData.java   |  20 +-
 .../olingo/server/tecsvc/data/DataProvider.java |  85 +++-
 .../olingo/server/tecsvc/data/FunctionData.java | 157 +++---
 .../processor/TechnicalEntityProcessor.java     |  27 +-
 .../TechnicalPrimitiveComplexProcessor.java     |   2 +-
 .../tecsvc/processor/TechnicalProcessor.java    |   7 +-
 .../ExpandSystemQueryOptionHandler.java         |  29 +-
 .../expression/ExpressionVisitorImpl.java       |  44 +-
 .../expression/operand/TypedOperand.java        |  59 +--
 .../expression/operand/UntypedOperand.java      |  33 +-
 .../expression/operand/VisitorOperand.java      |   2 +-
 .../expression/operation/BinaryOperator.java    |  17 +-
 .../queryoptions/options/FilterHandler.java     |  27 +-
 .../queryoptions/options/OrderByHandler.java    |  27 +-
 .../core/uri/antlr/TestFullResourcePath.java    | 235 +++++----
 .../myservice/mynamespace/data/Storage.java     | 360 +++++++++-----
 .../service/DemoActionProcessor.java            |  85 ++++
 .../mynamespace/service/DemoEdmProvider.java    | 157 +++++-
 .../service/DemoEntityCollectionProcessor.java  |  75 ++-
 .../service/DemoEntityProcessor.java            | 407 +++++++++++-----
 .../myservice/mynamespace/web/DemoServlet.java  |   2 +
 samples/tutorials/p10_media/pom.xml             |  85 ++++
 .../myservice/mynamespace/data/Storage.java     | 480 ++++++++++++++++++
 .../mynamespace/service/DemoEdmProvider.java    | 239 +++++++++
 .../service/DemoEntityCollectionProcessor.java  | 150 ++++++
 .../service/DemoEntityProcessor.java            | 340 +++++++++++++
 .../service/DemoPrimitiveProcessor.java         | 146 ++++++
 .../java/myservice/mynamespace/util/Util.java   | 161 +++++++
 .../myservice/mynamespace/web/DemoServlet.java  |  73 +++
 .../p10_media/src/main/webapp/WEB-INF/web.xml   |  40 ++
 .../p10_media/src/main/webapp/index.jsp         |  26 +
 samples/tutorials/p9_action/pom.xml             |  85 ++++
 .../myservice/mynamespace/data/Storage.java     | 482 +++++++++++++++++++
 .../service/DemoActionProcessor.java            |  85 ++++
 .../mynamespace/service/DemoEdmProvider.java    | 336 +++++++++++++
 .../service/DemoEntityCollectionProcessor.java  | 195 ++++++++
 .../service/DemoEntityProcessor.java            | 296 ++++++++++++
 .../service/DemoPrimitiveProcessor.java         | 146 ++++++
 .../java/myservice/mynamespace/util/Util.java   | 161 +++++++
 .../myservice/mynamespace/web/DemoServlet.java  |  75 +++
 .../p9_action/src/main/webapp/WEB-INF/web.xml   |  40 ++
 .../p9_action/src/main/webapp/index.jsp         |  26 +
 samples/tutorials/p9_action_preparation/pom.xml |  85 ++++
 .../myservice/mynamespace/data/Storage.java     | 412 ++++++++++++++++
 .../mynamespace/service/DemoEdmProvider.java    | 336 +++++++++++++
 .../service/DemoEntityCollectionProcessor.java  | 150 ++++++
 .../service/DemoEntityProcessor.java            | 244 ++++++++++
 .../service/DemoPrimitiveProcessor.java         | 146 ++++++
 .../java/myservice/mynamespace/util/Util.java   | 161 +++++++
 .../myservice/mynamespace/web/DemoServlet.java  |  73 +++
 .../src/main/webapp/WEB-INF/web.xml             |  40 ++
 .../src/main/webapp/index.jsp                   |  26 +
 samples/tutorials/pom.xml                       |   3 +
 82 files changed, 6805 insertions(+), 1016 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f663baf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmEnumTypeImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f663baf/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
----------------------------------------------------------------------
diff --cc lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
index 8741cd9,0000000..b027c64
mode 100644,000000..100644
--- a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
@@@ -1,354 -1,0 +1,339 @@@
 +/*
 + * 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.edm.provider;
 +import static org.hamcrest.CoreMatchers.containsString;
 +import static org.junit.Assert.assertArrayEquals;
 +import static org.junit.Assert.assertEquals;
 +import static org.junit.Assert.assertFalse;
 +import static org.junit.Assert.assertNotNull;
 +import static org.junit.Assert.assertNull;
 +import static org.junit.Assert.assertThat;
 +import static org.junit.Assert.assertTrue;
 +import static org.junit.Assert.fail;
 +
 +import java.util.Arrays;
 +import java.util.List;
 +
 +import org.apache.olingo.commons.api.edm.EdmEnumType;
 +import org.apache.olingo.commons.api.edm.EdmException;
 +import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 +import org.apache.olingo.commons.api.edm.FullQualifiedName;
 +import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 +import org.apache.olingo.commons.api.edm.provider.CsdlEnumMember;
 +import org.apache.olingo.commons.api.edm.provider.CsdlEnumType;
 +import org.apache.olingo.commons.core.edm.EdmEnumTypeImpl;
 +import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 +import org.junit.Test;
 +
 +public class EdmEnumTest {
 +
 +  private final EdmEnumType instance;
 +  private final EdmEnumType otherInstance;
 +  private final EdmEnumType nonFlagsInstance;
 +  private final EdmEnumType int16EnumType;
 +  private final EdmEnumType int32EnumType;
 +  private final EdmEnumType int32FlagType;
 +
 +  public EdmEnumTest() {
 +    final List<CsdlEnumMember> memberList = Arrays.asList(
 +        new CsdlEnumMember().setName("first").setValue("1"),
 +        new CsdlEnumMember().setName("second").setValue("64"));
 +
 +    final FullQualifiedName enumName = new FullQualifiedName("namespace", "name");
 +
 +    instance = new EdmEnumTypeImpl(null, enumName,
 +        new CsdlEnumType().setName("name").setMembers(memberList).setFlags(true)
 +            .setUnderlyingType(EdmPrimitiveTypeKind.SByte.getFullQualifiedName()));
 +    
 +    otherInstance = new EdmEnumTypeImpl(null, enumName,
 +        new CsdlEnumType().setName("name").setMembers(memberList).setFlags(true)
 +            .setUnderlyingType(EdmPrimitiveTypeKind.SByte.getFullQualifiedName()));
 +
 +    nonFlagsInstance = new EdmEnumTypeImpl(null, enumName,
 +        new CsdlEnumType().setName("name").setMembers(memberList).setFlags(false)
 +            .setUnderlyingType(EdmPrimitiveTypeKind.SByte.getFullQualifiedName()));
 +
-     int16EnumType = new EdmEnumTypeImpl(null,
-         new FullQualifiedName("testNamespace", "testName"),
++    final FullQualifiedName testName = new FullQualifiedName("testNamespace", "testName");
++
++    int16EnumType = new EdmEnumTypeImpl(null, testName,
 +        new CsdlEnumType().setName("MyEnum")
-             .setFlags(false)
 +            .setUnderlyingType(EdmPrimitiveTypeKind.Int16.getFullQualifiedName())
-             .setMembers(Arrays.asList(
-                 new CsdlEnumMember().setName("A").setValue("0"),
-                 new CsdlEnumMember().setName("B").setValue("1"),
-                 new CsdlEnumMember().setName("C").setValue("2"))));
++            .setMembers(Arrays.asList(  // implicit values according to specification: 0, 1, 2
++                new CsdlEnumMember().setName("A"),
++                new CsdlEnumMember().setName("B"),
++                new CsdlEnumMember().setName("C"))));
 +
-     int32EnumType = new EdmEnumTypeImpl(null,
-         new FullQualifiedName("testNamespace", "testName"),
++    int32EnumType = new EdmEnumTypeImpl(null, testName,
 +        new CsdlEnumType().setName("MyEnum")
 +            .setFlags(false)
 +            .setUnderlyingType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName())
 +            .setMembers(Arrays.asList(
 +                new CsdlEnumMember().setName("A").setValue("0"),
 +                new CsdlEnumMember().setName("B").setValue("1"),
-                 new CsdlEnumMember().setName("C").setValue("2"))));
++                new CsdlEnumMember().setName("C").setValue("65536"))));
 +
-     int32FlagType = new EdmEnumTypeImpl(null,
-         new FullQualifiedName("testNamespace", "testName"),
++    int32FlagType = new EdmEnumTypeImpl(null, testName,
 +        new CsdlEnumType().setName("MyEnum")
 +            .setFlags(true)
-             .setUnderlyingType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName())
 +            .setMembers(Arrays.asList(
 +                new CsdlEnumMember().setName("A").setValue("2"),
 +                new CsdlEnumMember().setName("B").setValue("4"),
 +                new CsdlEnumMember().setName("C").setValue("8"))));
 +  }
 +
 +  @Test
 +  public void nameSpace() throws Exception {
 +    assertEquals("namespace", instance.getNamespace());
 +  }
 +
 +  @Test
 +  public void name() throws Exception {
 +    assertEquals("name", instance.getName());
 +  }
 +
 +  @Test
 +  public void kind() throws Exception {
 +    assertEquals(EdmTypeKind.ENUM, instance.getKind());
 +  }
 +
 +  @Test
 +  public void compatibility() {
 +    assertTrue(instance.isCompatible(instance));
 +    assertTrue(instance.isCompatible(otherInstance));
 +    assertFalse(instance.isCompatible(instance.getUnderlyingType()));
 +  }
 +
 +  @Test
 +  public void defaultType() throws Exception {
 +    assertEquals(Byte.class, instance.getDefaultType());
-     EdmEnumType instance = new EdmEnumTypeImpl(null,
-         new FullQualifiedName("testNamespace", "testName"),
-         new CsdlEnumType().setName("MyEnum"));
-     assertEquals(Integer.class, instance.getUnderlyingType().getDefaultType());
++    assertEquals(Integer.class, int32FlagType.getUnderlyingType().getDefaultType());
 +  }
 +
 +  @Test
 +  public void members() throws Exception {
 +    assertArrayEquals(new String[] { "first", "second" }, instance.getMemberNames().toArray());
-     assertEquals("64", instance.getMember("second").getValue());
++    assertEquals("64", otherInstance.getMember("second").getValue());
 +    assertNull(instance.getMember("notExisting"));
 +  }
 +
 +  @Test
 +  public void underlyingType() throws Exception {
 +    assertEquals(EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.SByte), instance.getUnderlyingType());
 +  }
 +
 +  @Test
++  public void isFlags() throws Exception {
++    assertTrue(instance.isFlags());
++    assertFalse(nonFlagsInstance.isFlags());
++    assertFalse(int16EnumType.isFlags());
++  }
++
++  @Test
 +  public void validate() throws Exception {
 +    assertTrue(instance.validate(null, null, null, null, null, null));
 +    assertTrue(instance.validate(null, true, null, null, null, null));
 +    assertFalse(instance.validate(null, false, null, null, null, null));
 +    assertFalse(instance.validate("", null, null, null, null, null));
 +    assertFalse(instance.validate("something", null, null, null, null, null));
 +
 +    assertTrue(instance.validate("second", null, null, null, null, null));
 +    assertTrue(instance.validate("first,second", null, null, null, null, null));
 +    assertTrue(instance.validate("64", null, null, null, null, null));
 +    assertTrue(instance.validate("1,64", null, null, null, null, null));
 +  }
 +
 +  @Test
 +  public void toUriLiteral() throws Exception {
 +    assertNull(instance.toUriLiteral(null));
 +    assertEquals("namespace.name'first'", instance.toUriLiteral("first"));
 +  }
 +
 +  @Test
 +  public void fromUriLiteral() throws Exception {
 +    assertNull(instance.fromUriLiteral(null));
 +    assertEquals("first", instance.fromUriLiteral("namespace.name'first'"));
 +
 +    expectErrorInFromUriLiteral(instance, "");
 +    expectErrorInFromUriLiteral(instance, "name'first'");
 +    expectErrorInFromUriLiteral(instance, "namespace.name'first");
 +    expectErrorInFromUriLiteral(instance, "namespace.namespace'first");
 +  }
 +
 +  @Test
 +  public void valueToString() throws Exception {
 +    assertNull(instance.valueToString(null, null, null, null, null, null));
 +    assertNull(instance.valueToString(null, true, null, null, null, null));
 +    assertEquals("first", instance.valueToString(1, null, null, null, null, null));
 +    assertEquals("first", instance.valueToString((byte) 1, null, null, null, null, null));
 +    assertEquals("first", instance.valueToString((short) 1, null, null, null, null, null));
 +    assertEquals("second", instance.valueToString(Integer.valueOf(64), null, null, null, null, null));
 +    assertEquals("second", instance.valueToString(64L, null, null, null, null, null));
 +    assertEquals("first,second", instance.valueToString(65, null, null, null, null, null));
 +
 +    expectNullErrorInValueToString(instance);
 +    expectContentErrorInValueToString(instance, 3);
 +    expectTypeErrorInValueToString(instance, 1.0);
 +
 +    assertEquals("A", int32EnumType.valueToString(0, false, 0, 0, 0, false));
 +    assertEquals("B", int32EnumType.valueToString(1, false, 0, 0, 0, false));
-     assertEquals("C", int32EnumType.valueToString(2, false, 0, 0, 0, false));
++    assertEquals("C", int32EnumType.valueToString(65536, false, 0, 0, 0, false));
 +
 +    assertEquals("A", int16EnumType.valueToString(0, false, 0, 0, 0, false));
 +    assertEquals("B", int16EnumType.valueToString(1, false, 0, 0, 0, false));
 +    assertEquals("C", int16EnumType.valueToString(2, false, 0, 0, 0, false));
 +
 +    assertEquals("A", int32FlagType.valueToString(2, false, 0, 0, 0, false));
 +    assertEquals("B", int32FlagType.valueToString(4, false, 0, 0, 0, false));
 +    assertEquals("C", int32FlagType.valueToString(8, false, 0, 0, 0, false));
 +    assertEquals("A,B", int32FlagType.valueToString(0x2 + 0x4, false, 0, 0, 0, false));
 +    assertEquals("B,C", int32FlagType.valueToString(0x4 + 0x8, false, 0, 0, 0, false));
 +  }
 +
 +  @Test
 +  public void valueOfString() throws Exception {
 +    assertNull(instance.valueOfString(null, null, null, null, null, null, Byte.class));
 +    assertNull(instance.valueOfString(null, true, null, null, null, null, Byte.class));
 +    assertEquals(Short.valueOf((short) 1), instance.valueOfString("1", null, null, null, null, null, Short.class));
 +    assertEquals(Integer.valueOf(1), instance.valueOfString("1", null, null, null, null, null, Integer.class));
 +    assertEquals(Long.valueOf(64L), instance.valueOfString("64", null, null, null, null, null, Long.class));
 +    assertEquals(Long.valueOf(1), instance.valueOfString("first", null, null, null, null, null, Long.class));
 +    assertEquals(Byte.valueOf((byte) 65), instance.valueOfString("first,64", null, null, null, null, null, Byte.class));
 +    assertEquals(Integer.valueOf(1), instance.valueOfString("1,1,first", null, null, null, null, null, Integer.class));
 +
 +    assertEquals(Integer.valueOf(1), nonFlagsInstance.valueOfString("1", null, null, null, null, null, Integer.class));
 +    expectContentErrorInValueOfString(nonFlagsInstance, "1,64");
 +
 +    expectNullErrorInValueOfString(instance);
 +    expectContentErrorInValueOfString(instance, "2");
 +    expectContentErrorInValueOfString(instance, "1,");
 +    expectContentErrorInValueOfString(instance, ",1");
 +    expectTypeErrorInValueOfString(instance, "1");
 +
 +    assertEquals(Integer.valueOf(0), int32EnumType.valueOfString("A", null, null, null, null, null, Integer.class));
 +    assertEquals(Integer.valueOf(1), int32EnumType.valueOfString("B", null, null, null, null, null, Integer.class));
-     assertEquals(Integer.valueOf(2), int32EnumType.valueOfString("C", null, null, null, null, null, Integer.class));
++    assertEquals(Integer.valueOf(65536), int32EnumType.valueOfString("C", null, null, null, null, null,
++        Integer.class));
++
++    expectErrorInValueOfString(int32EnumType, "65536", null, Short.class, "converted");
 +
-     assertEquals(Integer.valueOf(0), int16EnumType.valueOfString("A", null, null, null, null, null, Integer.class));
-     assertEquals(Integer.valueOf(1), int16EnumType.valueOfString("B", null, null, null, null, null, Integer.class));
-     assertEquals(Integer.valueOf(2), int16EnumType.valueOfString("C", null, null, null, null, null, Integer.class));
++    assertEquals(Short.valueOf((short) 0), int16EnumType.valueOfString("A", null, null, null, null, null,
++        Short.class));
++    assertEquals(Short.valueOf((short) 1), int16EnumType.valueOfString("B", null, null, null, null, null,
++        Short.class));
++    assertEquals(Short.valueOf((short) 2), int16EnumType.valueOfString("C", null, null, null, null, null,
++        Short.class));
 +
 +    assertEquals(Integer.valueOf(2), int32FlagType.valueOfString("A", null, null, null, null, null, Integer.class));
 +    assertEquals(Integer.valueOf(4), int32FlagType.valueOfString("B", null, null, null, null, null, Integer.class));
 +    assertEquals(Integer.valueOf(8), int32FlagType.valueOfString("C", null, null, null, null, null, Integer.class));
 +    assertEquals(Integer.valueOf(0x2 + 0x4), int32FlagType.valueOfString("A,B", null, null, null, null, null,
 +        Integer.class));
 +    assertEquals(Integer.valueOf(0x4 + 0x8), int32FlagType.valueOfString("B,C", null, null, null, null, null,
 +        Integer.class));
 +    assertEquals(Integer.valueOf(0x2 + 0x4), int32FlagType.valueOfString("B,A", null, null, null, null, null,
 +        Integer.class));
 +  }
 +
-   private void expectErrorInValueToString(final EdmEnumType instance,
-       final Object value, final Boolean isNullable, final Integer maxLength,
-       final Integer precision, final Integer scale, final Boolean isUnicode,
-       final String message) {
-     try {
-       instance.valueToString(value, isNullable, maxLength, precision, scale, isUnicode);
-       fail("Expected exception not thrown");
-     } catch (final EdmPrimitiveTypeException e) {
-       assertNotNull(e.getLocalizedMessage());
-       assertThat(e.getLocalizedMessage(), containsString(message));
-     }
-   }
- 
-   private void expectErrorInUnderlyingType(final EdmPrimitiveTypeKind underlyingType, final String message) {
++  private void expectErrorInUnderlyingType(final EdmPrimitiveTypeKind underlyingType) {
 +    try {
 +      new EdmEnumTypeImpl(null,
 +          new FullQualifiedName("testNamespace", "testName"),
 +          new CsdlEnumType()
 +              .setName("MyEnum")
-               .setFlags(false)
-               .setUnderlyingType(underlyingType.getFullQualifiedName())
-               .setMembers(Arrays.asList(
-                   new CsdlEnumMember().setName("A").setValue("0"))));
++              .setUnderlyingType(underlyingType.getFullQualifiedName()));
 +      fail("Expected exception not thrown");
 +    } catch (final EdmException e) {
 +      assertNotNull(e.getLocalizedMessage());
-       assertThat(e.getLocalizedMessage(), containsString(message));
++      assertThat(e.getLocalizedMessage(), containsString("underlying type"));
 +    }
 +  }
 +
 +  @Test
 +  public void unsupportedUnderlyingType() throws Exception {
-     // Test some random unsupported types
-     expectErrorInUnderlyingType(EdmPrimitiveTypeKind.Date, "");
-     expectErrorInUnderlyingType(EdmPrimitiveTypeKind.Geography, "");
-     expectErrorInUnderlyingType(EdmPrimitiveTypeKind.Guid, "");
++    // Test some random unsupported types.
++    expectErrorInUnderlyingType(EdmPrimitiveTypeKind.Date);
++    expectErrorInUnderlyingType(EdmPrimitiveTypeKind.GeographyPoint);
++    expectErrorInUnderlyingType(EdmPrimitiveTypeKind.Guid);
 +  }
 +
 +  @Test
 +  public void outOfRangeValueToString() throws Exception {
-     expectErrorInValueToString(int16EnumType, Integer.MAX_VALUE, null, null, null, null, null, "");
++    expectContentErrorInValueToString(int16EnumType, Integer.MAX_VALUE);
 +  }
 +
 +  protected void expectErrorInFromUriLiteral(final EdmPrimitiveType instance, final String value) {
 +    try {
 +      instance.fromUriLiteral(value);
 +      fail("Expected exception not thrown");
 +    } catch (final EdmPrimitiveTypeException e) {
 +      assertNotNull(e.getLocalizedMessage());
 +      assertThat(e.getLocalizedMessage(), containsString("' has illegal content."));
 +    }
 +  }
 +
-   private void expectErrorInValueToString(final EdmPrimitiveType instance,
-       final Object value, final Boolean isNullable, final Integer maxLength,
-       final Integer precision, final Integer scale, final Boolean isUnicode,
-       final String message) {
++  private void expectErrorInValueToString(final EdmPrimitiveType instance, final Object value,
++      final Boolean isNullable, final String message) {
 +    try {
-       instance.valueToString(value, isNullable, maxLength, precision, scale, isUnicode);
++      instance.valueToString(value, isNullable, null, null, null, null);
 +      fail("Expected exception not thrown");
 +    } catch (final EdmPrimitiveTypeException e) {
 +      assertNotNull(e.getLocalizedMessage());
 +      assertThat(e.getLocalizedMessage(), containsString(message));
 +    }
 +  }
 +
 +  protected void expectNullErrorInValueToString(final EdmPrimitiveType instance) {
-     expectErrorInValueToString(instance, null, false, null, null, null, null, "The value NULL is not allowed.");
++    expectErrorInValueToString(instance, null, false, "The value NULL is not allowed.");
 +  }
 +
 +  protected void expectTypeErrorInValueToString(final EdmPrimitiveType instance, final Object value) {
-     expectErrorInValueToString(instance, value, null, null, null, null, null, "value type");
++    expectErrorInValueToString(instance, value, null, "value type");
 +  }
 +
 +  protected void expectContentErrorInValueToString(final EdmPrimitiveType instance, final Object value) {
-     expectErrorInValueToString(instance, value, null, null, null, null, null, "' is not valid.");
++    expectErrorInValueToString(instance, value, null, "' is not valid.");
 +  }
 +
-   private void expectErrorInValueOfString(final EdmPrimitiveType instance,
-       final String value, final Boolean isNullable, final Integer maxLength, final Integer precision,
-       final Integer scale, final Boolean isUnicode, final Class<?> returnType,
-       final String message) {
- 
++  private void expectErrorInValueOfString(final EdmPrimitiveType instance, final String value,
++      final Boolean isNullable, final Class<?> returnType, final String message) {
 +    try {
-       instance.valueOfString(value, isNullable, maxLength, precision, scale, isUnicode, returnType);
++      instance.valueOfString(value, isNullable, null, null, null, null, returnType);
 +      fail("Expected exception not thrown");
 +    } catch (final EdmPrimitiveTypeException e) {
 +      assertNotNull(e.getLocalizedMessage());
 +      assertThat(e.getLocalizedMessage(), containsString(message));
 +    }
 +  }
 +
 +  protected void expectTypeErrorInValueOfString(final EdmPrimitiveType instance, final String value) {
-     expectErrorInValueOfString(instance, value, null, null, null, null, null, Class.class,
++    expectErrorInValueOfString(instance, value, null, Class.class,
 +        "The value type class java.lang.Class is not supported.");
 +  }
 +
 +  protected void expectContentErrorInValueOfString(final EdmPrimitiveType instance, final String value) {
-     expectErrorInValueOfString(instance, value, null, null, null, null, null, instance.getDefaultType(),
-         "illegal content");
++    expectErrorInValueOfString(instance, value, null, instance.getDefaultType(), "illegal content");
 +  }
 +
 +  protected void expectNullErrorInValueOfString(final EdmPrimitiveType instance) {
-     expectErrorInValueOfString(instance, null, false, null, null, null, null, instance.getDefaultType(),
++    expectErrorInValueOfString(instance, null, false, instance.getDefaultType(),
 +        "The literal 'null' is not allowed.");
 +  }
- }
++}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f663baf/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
----------------------------------------------------------------------
diff --cc lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
index 52432ca,435fdb7..4a3a6ef
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
@@@ -928,9 -602,10 +928,13 @@@ public class MetadataDocumentXmlSeriali
        for (String memberName : enumType.getMemberNames()) {
          writer.writeEmptyElement(XML_MEMBER);
          writer.writeAttribute(XML_NAME, memberName);
 -        final String value = enumType.getMember(memberName).getValue();
 -        if (value != null) {
 -          writer.writeAttribute(XML_VALUE, value);
++        
 +        EdmMember member = enumType.getMember(memberName);
-         writer.writeAttribute(XML_VALUE, member.getValue());
++        if (member.getValue() != null) {
++          writer.writeAttribute(XML_VALUE, member.getValue());
+         }
++        
 +        appendAnnotations(writer, member);
        }
  
        writer.writeEndElement();