private static Dependency parseOldVersionsWithoutSchema(File f) throws JAXBException {
    final JAXBContext context =
        JAXBContext.newInstance(com.sap.prd.mobile.ios.mios.versioninfo.v_1_2_0.Versions.class);
    final Unmarshaller unmarshaller = context.createUnmarshaller();

    final com.sap.prd.mobile.ios.mios.versioninfo.v_1_2_0.Versions versions =
        (com.sap.prd.mobile.ios.mios.versioninfo.v_1_2_0.Versions) unmarshaller.unmarshal(f);

    final Coordinates coordinates = new Coordinates();
    coordinates.setGroupId(versions.getCoordinates().getGroupId());
    coordinates.setArtifactId(versions.getCoordinates().getArtifactId());
    coordinates.setVersion(versions.getCoordinates().getVersion());

    final SCM scm = new SCM();
    scm.setConnection(versions.getScm().getConnection());
    scm.setRevision(versions.getScm().getRevision());

    final Dependency dependency = new Dependency();
    dependency.setCoordinates(coordinates);
    dependency.setScm(scm);

    if (versions.getDependencies() != null) {
      for (com.sap.prd.mobile.ios.mios.versioninfo.v_1_2_0.Dependency d :
          versions.getDependencies()) {
        marshalDependenciesVersionsWithoutSchema(dependency, d);
      }
    }

    return dependency;
  }
  private static void marshalDependenciesVersionsWithoutSchema(
      final Dependency dependency, com.sap.prd.mobile.ios.mios.versioninfo.v_1_2_0.Dependency d) {
    Dependency _d = new Dependency();
    Coordinates depCoorinates = new Coordinates();
    depCoorinates.setGroupId(d.getCoordinates().getGroupId());
    depCoorinates.setArtifactId(d.getCoordinates().getArtifactId());
    depCoorinates.setVersion(d.getCoordinates().getVersion());
    _d.setCoordinates(depCoorinates);

    SCM depSCM = new SCM();
    depSCM.setConnection(d.getScm().getConnection());
    depSCM.setRevision(d.getScm().getRevision());
    _d.setScm(depSCM);
    dependency.addDependency(_d);

    for (com.sap.prd.mobile.ios.mios.versioninfo.v_1_2_0.Dependency __d : d.getDependencies())
      marshalDependenciesVersionsWithoutSchema(_d, __d);
  }
  private static void marshalOldDependencies(
      final Dependency dependency, com.sap.prd.mobile.ios.mios.versioninfo.v_0_0_0.Dependency d) {
    Dependency _d = new Dependency();
    Coordinates depCoorinates = new Coordinates();
    depCoorinates.setGroupId(d.getCoordinates().getGroupId());
    depCoorinates.setArtifactId(d.getCoordinates().getArtifactId());
    depCoorinates.setVersion(d.getCoordinates().getVersion());
    _d.setCoordinates(depCoorinates);

    SCM depSCM = new SCM();
    depSCM.setConnection(
        "scm:perforce:" + d.getScm().getRepository() + ":" + getDepotPath(d.getScm().getPath()));
    depSCM.setRevision(d.getScm().getSnapshotId());
    _d.setScm(depSCM);
    dependency.addDependency(_d);

    for (com.sap.prd.mobile.ios.mios.versioninfo.v_0_0_0.Dependency __d : d.getDependencies())
      marshalOldDependencies(_d, __d);
  }
  private void createVersionInfoFile(
      final String groupId,
      final String artifactId,
      final String version,
      Properties versionInfo,
      List<Dependency> dependencies,
      OutputStream os)
      throws MojoExecutionException, JAXBException {
    try {

      final String connectionString =
          "scm:perforce:"
              + versionInfo.getProperty("port")
              + ":"
              + getDepotPath(versionInfo.getProperty("depotpath"));

      final Versions versions = new Versions();

      for (final Dependency dep : dependencies) versions.addDependency(dep);

      final SCM scm = new SCM();
      scm.setConnection(connectionString);
      scm.setRevision(versionInfo.getProperty("changelist"));

      final Coordinates coordinates = new Coordinates();
      coordinates.setGroupId(groupId);
      coordinates.setArtifactId(artifactId);
      coordinates.setVersion(version);

      versions.setScm(scm);
      versions.setCoordinates(coordinates);

      final JAXBContext context = JAXBContext.newInstance(Versions.class);

      final Marshaller marshaller = context.createMarshaller();
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
      marshaller.setProperty(
          Marshaller.JAXB_SCHEMA_LOCATION,
          "urn:xml.sap.com:XCodePlugin:VersionInfo"
              + " "
              + NEXUS_URL
              + "/content/repositories/"
              + SCHEMA_REPOSITORY
              + "/"
              + SCHEMA_GROUP_ID.replace(".", "/")
              + "/"
              + SCHEMA_ARTIFACT_ID
              + "/"
              + SCHEMA_VERSION
              + "/"
              + SCHEMA_ARTIFACT_ID
              + "-"
              + SCHEMA_VERSION
              + ".xsd");

      final ByteArrayOutputStream byteOs = new ByteArrayOutputStream();

      marshaller.marshal(versions, byteOs);

      final byte[] b = byteOs.toByteArray();

      DomUtils.validateDocument(
          DocumentBuilderFactory.newInstance()
              .newDocumentBuilder()
              .parse(new ByteArrayInputStream(b)));

      IOUtils.write(b, os);
    } catch (ParserConfigurationException e) {
      throw new MojoExecutionException("Cannot create versions.xml.", e);
    } catch (IOException e) {
      throw new MojoExecutionException("Cannot create versions.xml.", e);
    } catch (SAXException e) {
      throw new MojoExecutionException("Cannot create versions.xml.", e);
    }
  }