Author: veithen
Date: Tue May 25 18:06:27 2010
New Revision: 948144
URL: http://svn.apache.org/viewvc?rev=948144&view=rev
Log:
As pointed out by Hiranya Jayathilaka, AbstractTransportListenerEx should start
and stop transport level protocol endpoints in the start/stop methods instead
of the init/destroy methods.
Modified:
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
Modified:
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java?rev=948144&r1=948143&r2=948144&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
(original)
+++
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
Tue May 25 18:06:27 2010
@@ -43,10 +43,9 @@ public abstract class AbstractTransportL
extends AbstractTransportListener {
/**
- * The collection of protocol specific endpoints managed by this transport.
- * This includes endpoints configured at the transport level.
+ * The collection of protocol specific endpoints configured at the service
level.
*/
- private List<E> endpoints = new ArrayList<E>();
+ private List<E> serviceEndpoints = new ArrayList<E>();
/**
* The endpoint configured at the transport level. <code>null</code> if no
@@ -66,8 +65,6 @@ public abstract class AbstractTransportL
E endpoint = createEndpoint();
endpoint.init(this, null);
if (endpoint.loadConfiguration(transportIn)) {
- startEndpoint(endpoint);
- endpoints.add(endpoint);
globalEndpoint = endpoint;
}
}
@@ -82,21 +79,23 @@ public abstract class AbstractTransportL
protected abstract void doInit() throws AxisFault;
@Override
- public void destroy() {
- // Explicitly stop all endpoints not predispatched to services. All
other endpoints will
- // be stopped by stopListeningForService.
- List<E> endpointsToStop = new ArrayList<E>();
- for (E endpoint : endpoints) {
- if (endpoint.getService() == null) {
- endpointsToStop.add(endpoint);
- }
+ public void start() throws AxisFault {
+ super.start();
+ // Explicitly start the endpoint configured at the transport level.
All other endpoints will
+ // be started by startListeningForService.
+ if (globalEndpoint != null) {
+ startEndpoint(globalEndpoint);
}
- for (E endpoint : endpointsToStop) {
- stopEndpoint(endpoint);
- endpoints.remove(endpoint);
+ }
+
+ @Override
+ public void stop() throws AxisFault {
+ super.stop();
+ // Explicitly stop the endpoint configured at the transport level. All
other endpoints will
+ // be stopped by stopListeningForService.
+ if (globalEndpoint != null) {
+ stopEndpoint(globalEndpoint);
}
-
- super.destroy();
}
@Override
@@ -109,9 +108,9 @@ public abstract class AbstractTransportL
if (serviceName.indexOf('.') != -1) {
serviceName = serviceName.substring(0, serviceName.indexOf('.'));
}
- for (E endpoint : endpoints) {
+ for (E endpoint : serviceEndpoints) {
AxisService service = endpoint.getService();
- if (service != null && service.getName().equals(serviceName)) {
+ if (service.getName().equals(serviceName)) {
return endpoint.getEndpointReferences(service, ip);
}
}
@@ -132,8 +131,21 @@ public abstract class AbstractTransportL
}
}
+ /**
+ * Get the collection of all protocol endpoints managed by this transport,
including the
+ * endpoint configured at the transport level.
+ *
+ * @return the collection of all protocol endpoints
+ */
public final Collection<E> getEndpoints() {
- return Collections.unmodifiableCollection(endpoints);
+ if (globalEndpoint == null) {
+ return Collections.unmodifiableCollection(serviceEndpoints);
+ } else {
+ List<E> endpoints = new ArrayList<E>(serviceEndpoints.size() + 1);
+ endpoints.add(globalEndpoint);
+ endpoints.addAll(serviceEndpoints);
+ return endpoints;
+ }
}
protected abstract E createEndpoint();
@@ -144,7 +156,7 @@ public abstract class AbstractTransportL
endpoint.init(this, service);
if (endpoint.loadConfiguration(service)) {
startEndpoint(endpoint);
- endpoints.add(endpoint);
+ serviceEndpoints.add(endpoint);
} else if (globalEndpoint != null) {
return;
} else {
@@ -157,10 +169,10 @@ public abstract class AbstractTransportL
@Override
protected final void stopListeningForService(AxisService service) {
- for (E endpoint : endpoints) {
+ for (E endpoint : serviceEndpoints) {
if (service == endpoint.getService()) {
stopEndpoint(endpoint);
- endpoints.remove(endpoint);
+ serviceEndpoints.remove(endpoint);
return;
}
}