@Override
  public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm)
      throws Exception {
    int stateMask =
        srvMeta.getInt(Params.stateMask, Bundle.INSTALLED | Bundle.RESOLVED | Bundle.ACTIVE);
    String filter = srvMeta.getString(Params.filter, null);
    Class<?> adapterImplClass = b.loadClass(srvMeta.getString(Params.impl));
    String[] provides = srvMeta.getStrings(Params.provides, null);
    Dictionary<String, Object> properties = srvMeta.getDictionary(Params.properties, null);
    boolean propagate = "true".equals(srvMeta.getString(Params.propagate, "false"));
    Component c = dm.createBundleAdapterService(stateMask, filter, propagate);
    c.setInterface(provides, properties);
    String factoryMethod = srvMeta.getString(Params.factoryMethod, null);
    if (factoryMethod == null) {
      c.setImplementation(adapterImplClass);
    } else {
      c.setFactory(adapterImplClass, factoryMethod);
    }

    setCommonServiceParams(c, srvMeta);
    c.setComposition(srvMeta.getString(Params.composition, null));
    ServiceLifecycleHandler lfcleHandler = new ServiceLifecycleHandler(c, b, dm, srvMeta, depsMeta);
    // The dependencies will be plugged by our lifecycle handler.
    c.setCallbacks(lfcleHandler, "init", "start", "stop", "destroy");
    // Adds dependencies (except named dependencies, which are managed by the lifecycle handler).
    addUnamedDependencies(b, dm, c, srvMeta, depsMeta);
    dm.add(c);
  }