You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/03/08 17:49:07 UTC
svn commit: r384266 -
/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java
Author: gnodet
Date: Wed Mar 8 08:49:06 2006
New Revision: 384266
URL: http://svn.apache.org/viewcvs?rev=384266&view=rev
Log:
SM-295: use SU descriptor to retrieve the endpoint interface
Modified:
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java?rev=384266&r1=384265&r2=384266&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/framework/EndpointRegistry.java Wed Mar 8 08:49:06 2006
@@ -35,6 +35,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.jbi.deployment.Provides;
+import org.apache.servicemix.jbi.deployment.Services;
import org.apache.servicemix.jbi.event.EndpointEvent;
import org.apache.servicemix.jbi.event.EndpointListener;
import org.apache.servicemix.jbi.servicedesc.AbstractServiceEndpoint;
@@ -148,11 +150,14 @@
}
// Create a new endpoint
InternalEndpoint serviceEndpoint = new InternalEndpoint(provider.getComponentNameSpace(), endpointName, serviceName);
- // Get implemented interfaces
+ // Get interface from activationSpec
if (provider.getActivationSpec().getInterfaceName() != null) {
serviceEndpoint.addInterface(provider.getActivationSpec().getInterfaceName());
}
- retrieveInterfacesFromDescription(provider, serviceEndpoint);
+ // Get interface from SU jbi descriptor
+ retrieveInterfaceFromSUDescriptor(serviceEndpoint);
+ // Get interfaces from WSDL
+ retrieveInterfacesFromDescription(serviceEndpoint);
// Set remote namespaces
if (registered != null) {
InternalEndpoint[] remote = registered.getRemoteEndpoints();
@@ -184,32 +189,63 @@
}
fireEvent(serviceEndpoint, EndpointEvent.INTERNAL_ENDPOINT_UNREGISTERED);
}
+
+ /**
+ * Retrieve interface implemented by the given endpoint using the SU jbi descriptors.
+ *
+ * @param serviceEndpoint the endpoint being checked
+ */
+ protected void retrieveInterfaceFromSUDescriptor(InternalEndpoint serviceEndpoint) {
+ ServiceUnitLifeCycle[] sus = registry.getDeployedServiceUnits(serviceEndpoint.getComponentNameSpace().getName());
+ for (int i = 0; i < sus.length; i++) {
+ Services services = sus[i].getServices();
+ if (services != null) {
+ Provides[] provides = services.getProvides();
+ for (int j = 0; j < provides.length; j++) {
+ if (provides[j].getInterfaceName() != null &&
+ serviceEndpoint.getServiceName().equals(provides[j].getServiceName()) &&
+ serviceEndpoint.getEndpointName().equals(provides[j].getEndpointName())) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Endpoint " + serviceEndpoint + " is provided by SU " + sus[i].getName());
+ logger.debug("Endpoint " + serviceEndpoint + " implements interface " + provides[j].getInterfaceName());
+ }
+ serviceEndpoint.addInterface(provides[j].getInterfaceName());
+ }
+ }
+ }
+ }
+ }
- protected void retrieveInterfacesFromDescription(ComponentContextImpl provider, InternalEndpoint answer) {
+ /**
+ * Retrieve interfaces implemented by the given endpoint using its WSDL description.
+ *
+ * @param serviceEndpoint the endpoint being checked
+ */
+ protected void retrieveInterfacesFromDescription(InternalEndpoint serviceEndpoint) {
try {
- Document document = provider.getComponent().getServiceDescription(answer);
+ Document document = registry.getEndpointDescriptor(serviceEndpoint);
if (document == null) {
if (logger.isDebugEnabled()) {
- logger.debug("Endpoint " + answer + " has no service description");
+ logger.debug("Endpoint " + serviceEndpoint + " has no service description");
}
return;
}
Definition definition = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, document);
- Service service = definition.getService(answer.getServiceName());
+ Service service = definition.getService(serviceEndpoint.getServiceName());
if (service == null) {
- logger.info("Endpoint " + answer + " has a service description, but no matching service found in " + definition.getServices().keySet());
+ logger.info("Endpoint " + serviceEndpoint + " has a service description, but no matching service found in " + definition.getServices().keySet());
return;
}
- Port port = service.getPort(answer.getEndpointName());
+ Port port = service.getPort(serviceEndpoint.getEndpointName());
if (port == null) {
- logger.info("Endpoint " + answer + " has a service description, but no matching endpoint found in " + service.getPorts().keySet());
+ logger.info("Endpoint " + serviceEndpoint + " has a service description, but no matching endpoint found in " + service.getPorts().keySet());
return;
}
QName interfaceName = port.getBinding().getPortType().getQName();
if (logger.isDebugEnabled()) {
- logger.debug("Endpoint " + answer + " implements interface " + interfaceName);
+ logger.debug("Endpoint " + serviceEndpoint + " implements interface " + interfaceName);
}
- answer.addInterface(interfaceName);
+ serviceEndpoint.addInterface(interfaceName);
} catch (Exception e) {
logger.warn("Error retrieving interfaces from service description: " + e.getMessage());
if (logger.isDebugEnabled()) {