private void appendProperties(final XMLStreamWriter writer, final EdmStructuredType type) throws XMLStreamException { List<String> propertyNames = new ArrayList<String>(type.getPropertyNames()); if (type.getBaseType() != null) { propertyNames.removeAll(type.getBaseType().getPropertyNames()); } for (String propertyName : propertyNames) { EdmProperty property = type.getStructuralProperty(propertyName); writer.writeEmptyElement(XML_PROPERTY); writer.writeAttribute(XML_NAME, propertyName); String fqnString; if (property.isPrimitive()) { fqnString = getFullQualifiedName(property.getType(), property.isCollection()); } else { fqnString = getAliasedFullQualifiedName(property.getType(), property.isCollection()); } writer.writeAttribute(XML_TYPE, fqnString); // Facets if (!property.isNullable()) { writer.writeAttribute(XML_NULLABLE, "" + property.isNullable()); } if (!property.isUnicode()) { writer.writeAttribute(XML_UNICODE, "" + property.isUnicode()); } if (property.getDefaultValue() != null) { writer.writeAttribute(XML_DEFAULT_VALUE, property.getDefaultValue()); } if (property.getMaxLength() != null) { writer.writeAttribute(XML_MAX_LENGTH, "" + property.getMaxLength()); } if (property.getPrecision() != null) { writer.writeAttribute(XML_PRECISION, "" + property.getPrecision()); } if (property.getScale() != null) { writer.writeAttribute(XML_SCALE, "" + property.getScale()); } } }