Exemplo n.º 1
0
  private void loadServicesFromServicesPath(WSDDDeployment deployment, ServiceLoader loader)
      throws IOException {
    for (String name : loader.listServiceNames()) {
      if (deployment.getWSDDService(new QName(name)) != null) continue;

      ServiceFactory factory = null;
      try {
        factory = loader.loadServiceFactory(Thread.currentThread().getContextClassLoader(), name);
      } catch (RuntimeException e) {
        if (e.getClass().getName().equals("BeanCreationException")) {
          logger.log(
              Level.WARNING,
              "ignore service \"" + name + "\" because interface class not determined.",
              e);
          continue;
        }
        throw e;
      }
      Set<Class<?>> interfaceClasses = factory.getInterfaces();
      if (interfaceClasses.isEmpty()) {
        logger.warning("ignore service \"" + name + "\" because interface class not determined.");
        continue;
      }

      WSDDService s = new WSDDService();
      s.setName(name);
      s.getServiceDesc().setName(name);
      s.setProviderQName(new QName("http://xml.apache.org/axis/wsdd/providers/java", "SGRPC"));
      s.setParameter("className", interfaceClasses.iterator().next().getName());
      s.setParameter(
          "x_sg_interfaces",
          StringUtil.join(
              interfaceClasses.toArray(new Class<?>[] {}), new ClassToClassNameTransformer(), ","));
      s.setParameter("x_sg_managed", "true");
      for (Class<?> c : interfaceClasses) {
        addBeanMapping(s, c.getName());
      }
      deployment.deployService(s);
    }
  }