diff --git a/org.springframework.web/src/main/java/org/springframework/remoting/jaxws/AbstractJaxWsServiceExporter.java b/org.springframework.web/src/main/java/org/springframework/remoting/jaxws/AbstractJaxWsServiceExporter.java index f300bbe74fc..86aa4f2587d 100644 --- a/org.springframework.web/src/main/java/org/springframework/remoting/jaxws/AbstractJaxWsServiceExporter.java +++ b/org.springframework.web/src/main/java/org/springframework/remoting/jaxws/AbstractJaxWsServiceExporter.java @@ -16,6 +16,7 @@ package org.springframework.remoting.jaxws; +import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -26,9 +27,11 @@ import javax.xml.ws.WebServiceProvider; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.CannotLoadBeanClassException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; /** * Abstract exporter for JAX-WS services, autodetecting annotated service beans @@ -99,26 +102,35 @@ public abstract class AbstractJaxWsServiceExporter implements BeanFactoryAware, * @see #publishEndpoint */ public void publishEndpoints() { - String[] beanNames = this.beanFactory.getBeanNamesForType(Object.class, false, false); + Set beanNames = new LinkedHashSet(this.beanFactory.getBeanDefinitionCount()); + beanNames.addAll(Arrays.asList(this.beanFactory.getBeanDefinitionNames())); + if (this.beanFactory instanceof ConfigurableBeanFactory) { + beanNames.addAll(Arrays.asList(((ConfigurableBeanFactory) this.beanFactory).getSingletonNames())); + } for (String beanName : beanNames) { - Class type = this.beanFactory.getType(beanName); - WebService wsAnnotation = type.getAnnotation(WebService.class); - WebServiceProvider wsProviderAnnotation = type.getAnnotation(WebServiceProvider.class); - if (wsAnnotation != null || wsProviderAnnotation != null) { - Endpoint endpoint = Endpoint.create(this.beanFactory.getBean(beanName)); - if (this.endpointProperties != null) { - endpoint.setProperties(this.endpointProperties); + try { + Class type = this.beanFactory.getType(beanName); + WebService wsAnnotation = type.getAnnotation(WebService.class); + WebServiceProvider wsProviderAnnotation = type.getAnnotation(WebServiceProvider.class); + if (wsAnnotation != null || wsProviderAnnotation != null) { + Endpoint endpoint = Endpoint.create(this.beanFactory.getBean(beanName)); + if (this.endpointProperties != null) { + endpoint.setProperties(this.endpointProperties); + } + if (this.executor != null) { + endpoint.setExecutor(this.executor); + } + if (wsAnnotation != null) { + publishEndpoint(endpoint, wsAnnotation); + } + else { + publishEndpoint(endpoint, wsProviderAnnotation); + } + this.publishedEndpoints.add(endpoint); } - if (this.executor != null) { - endpoint.setExecutor(this.executor); - } - if (wsAnnotation != null) { - publishEndpoint(endpoint, wsAnnotation); - } - else { - publishEndpoint(endpoint, wsProviderAnnotation); - } - this.publishedEndpoints.add(endpoint); + } + catch (CannotLoadBeanClassException ex) { + // ignore beans where the class is not resolvable } } }