private void appendNavigationProperties( final XMLStreamWriter writer, final EdmStructuredType type) throws XMLStreamException { List<String> navigationPropertyNames = new ArrayList<String>(type.getNavigationPropertyNames()); if (type.getBaseType() != null) { navigationPropertyNames.removeAll(type.getBaseType().getNavigationPropertyNames()); } for (String navigationPropertyName : navigationPropertyNames) { EdmNavigationProperty navigationProperty = type.getNavigationProperty(navigationPropertyName); writer.writeStartElement(XML_NAVIGATION_PROPERTY); writer.writeAttribute(XML_NAME, navigationPropertyName); writer.writeAttribute( XML_TYPE, getAliasedFullQualifiedName( navigationProperty.getType(), navigationProperty.isCollection())); if (!navigationProperty.isNullable()) { writer.writeAttribute(XML_NULLABLE, "" + navigationProperty.isNullable()); } if (navigationProperty.getPartner() != null) { EdmNavigationProperty partner = navigationProperty.getPartner(); writer.writeAttribute(XML_PARTNER, partner.getName()); } if (navigationProperty.containsTarget()) { writer.writeAttribute(XML_CONTAINS_TARGET, "" + navigationProperty.containsTarget()); } if (navigationProperty.getReferentialConstraints() != null) { for (EdmReferentialConstraint constraint : navigationProperty.getReferentialConstraints()) { writer.writeEmptyElement("ReferentialConstraint"); writer.writeAttribute(XML_PROPERTY, constraint.getPropertyName()); writer.writeAttribute("ReferencedProperty", constraint.getReferencedPropertyName()); } } writer.writeEndElement(); } }