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); } }