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/27 20:15:07 UTC
svn commit: r389216 - in /incubator/servicemix/trunk:
servicemix-http/src/main/java/org/apache/servicemix/http/
servicemix-http/src/test/java/org/apache/servicemix/http/
servicemix-jms/src/main/java/org/apache/servicemix/jms/
servicemix-jms/src/test/ja...
Author: gnodet
Date: Mon Mar 27 10:15:05 2006
New Revision: 389216
URL: http://svn.apache.org/viewcvs?rev=389216&view=rev
Log:
SM-369: add a way to alias proxied services
Modified:
incubator/servicemix/trunk/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java
incubator/servicemix/trunk/servicemix-http/src/test/java/org/apache/servicemix/http/HttpXBeanDeployerTest.java
incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java
incubator/servicemix/trunk/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsXBeanDeployerTest.java
incubator/servicemix/trunk/servicemix-jms/src/test/resources/xbean/xbean.xml
incubator/servicemix/trunk/servicemix-soap/project.xml
incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapEndpoint.java
incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapHelper.java
Modified: incubator/servicemix/trunk/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java (original)
+++ incubator/servicemix/trunk/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java Mon Mar 27 10:15:05 2006
@@ -15,12 +15,8 @@
*/
package org.apache.servicemix.http;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
+import java.util.Iterator;
-import javax.jbi.component.ComponentContext;
-import javax.jbi.messaging.MessageExchange.Role;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.wsdl.Definition;
import javax.wsdl.Port;
@@ -28,20 +24,11 @@
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.http.HTTPAddress;
import javax.wsdl.extensions.soap.SOAPAddress;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLReader;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.servicemix.common.ExchangeProcessor;
-import org.apache.servicemix.common.wsdl1.JbiExtension;
-import org.apache.servicemix.common.xbean.XBeanServiceUnit;
import org.apache.servicemix.http.processors.ConsumerProcessor;
import org.apache.servicemix.http.processors.ProviderProcessor;
import org.apache.servicemix.soap.SoapEndpoint;
-import org.springframework.core.io.Resource;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
import com.ibm.wsdl.extensions.http.HTTPAddressImpl;
import com.ibm.wsdl.extensions.soap.SOAPAddressImpl;
@@ -57,57 +44,8 @@
public class HttpEndpoint extends SoapEndpoint {
protected ExtensibilityElement binding;
- protected ExchangeProcessor processor;
- protected ServiceEndpoint activated;
- protected Role role;
- protected URI defaultMep;
protected String locationURI;
- protected boolean soap;
- protected String soapVersion;
- protected Resource wsdlResource;
- protected QName defaultOperation;
- /* (non-Javadoc)
- * @see org.apache.servicemix.common.Endpoint#getProcessor()
- */
- public ExchangeProcessor getProcessor() {
- return this.processor;
- }
-
- /* (non-Javadoc)
- * @see org.servicemix.common.Endpoint#activate()
- */
- public void activate() throws Exception {
- ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
- loadWsdl();
- if (getRole() == Role.PROVIDER) {
- activated = ctx.activateEndpoint(service, endpoint);
- processor = new ProviderProcessor(this);
- } else {
- activated = new HttpExternalEndpoint(this);
- ctx.registerExternalEndpoint(activated);
- processor = new ConsumerProcessor(this);
- }
- processor.start();
- }
-
- /* (non-Javadoc)
- * @see org.servicemix.common.Endpoint#deactivate()
- */
- public void deactivate() throws Exception {
- ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
- if (getRole() == Role.PROVIDER) {
- ServiceEndpoint ep = activated;
- activated = null;
- ctx.deactivateEndpoint(ep);
- } else {
- ServiceEndpoint ep = activated;
- activated = null;
- ctx.deregisterExternalEndpoint(ep);
- }
- processor.stop();
- }
-
public ExtensibilityElement getBinding() {
return binding;
}
@@ -116,38 +54,6 @@
this.binding = binding;
}
- public Role getRole() {
- return role;
- }
-
- public void setRole(Role role) {
- this.role = role;
- }
-
- /**
- * @org.apache.xbean.Property alias="role"
- * @param role
- */
- public void setRoleAsString(String role) {
- if (role == null) {
- throw new IllegalArgumentException("Role must be specified");
- } else if (JbiExtension.ROLE_CONSUMER.equals(role)) {
- setRole(Role.CONSUMER);
- } else if (JbiExtension.ROLE_PROVIDER.equals(role)) {
- setRole(Role.PROVIDER);
- } else {
- throw new IllegalArgumentException("Unrecognized role: " + role);
- }
- }
-
- public void setDefaultMep(URI defaultMep) {
- this.defaultMep = defaultMep;
- }
-
- public URI getDefaultMep() {
- return defaultMep;
- }
-
public String getLocationURI() {
return locationURI;
}
@@ -156,148 +62,60 @@
this.locationURI = locationUri;
}
- public boolean isSoap() {
- return soap;
- }
-
- public void setSoap(boolean soap) {
- this.soap = soap;
- }
-
- public String getSoapVersion() {
- return soapVersion;
- }
-
- public void setSoapVersion(String soapVersion) {
- this.soapVersion = soapVersion;
- }
-
/**
- * Load the wsdl for this endpoint.
+ * @org.apache.xbean.Property alias="role"
+ * @param role
*/
- protected void loadWsdl() {
- // Load WSDL from the resource
- if (description == null && wsdlResource != null) {
- InputStream is = null;
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- try {
- if (serviceUnit instanceof XBeanServiceUnit) {
- XBeanServiceUnit su = (XBeanServiceUnit) serviceUnit;
- Thread.currentThread().setContextClassLoader(su.getKernel().getClassLoaderFor(su.getConfiguration()));
- }
- is = wsdlResource.getInputStream();
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- Definition def = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, new InputSource(is));
- overrideDefinition(def);
- } catch (Exception e) {
- logger.warn("Could not load description from resource", e);
- } finally {
- Thread.currentThread().setContextClassLoader(cl);
- if (is != null) {
- try {
- is.close();
- } catch (IOException e) {
- // Ignore
- }
- }
- }
- }
- // If the endpoint is a consumer, try to find
- // the proxied endpoint description
- if (description == null && definition == null && getRole() == Role.CONSUMER) {
- retrieveProxiedEndpointDefinition();
- }
- // If the wsdl definition is provided,
- // convert it to a DOM document
- if (description == null && definition != null) {
- try {
- description = WSDLFactory.newInstance().newWSDLWriter().getDocument(definition);
- } catch (Exception e) {
- logger.warn("Could not create document from wsdl description", e);
- }
- }
- // If the dom description is provided
- // convert it to a WSDL definition
- if (definition == null && description != null) {
- try {
- definition = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, description);
- } catch (Exception e) {
- logger.warn("Could not create wsdl definition from dom document", e);
- }
- }
+ public void setRoleAsString(String role) {
+ super.setRoleAsString(role);
}
- /**
- * Create a wsdl definition for a consumer endpoint.
- * Loads the target endpoint definition and add http binding
- * informations to it.
- */
- protected void retrieveProxiedEndpointDefinition() {
- try {
- if (service != null && endpoint != null) {
- ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
- ServiceEndpoint se = ctx.getEndpoint(service, endpoint);
- if (se != null) {
- Document doc = ctx.getEndpointDescriptor(se);
- if (doc != null) {
- WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
- Definition def = reader.readWSDL(null, doc);
- if (def != null) {
- overrideDefinition(def);
- }
- }
- }
+ protected void overrideDefinition(Definition def) {
+ Service svc = null;
+ Port port = null;
+ if (targetService != null && targetEndpoint != null) {
+ svc = def.getService(targetService);
+ port = (svc != null) ? svc.getPort(targetEndpoint) : null;
+ } else if (targetInterfaceName != null) {
+ Iterator it = def.getServices().values().iterator();
+ svc = it .hasNext() ? (Service) it.next() : null;
+ if (svc != null) {
+ it = svc.getPorts().values().iterator();
+ port = (it.hasNext()) ? (Port) it.next() : null;
}
- } catch (Exception e) {
- logger.debug("Unable to retrieve target endpoint descriptor", e);
+ } else {
+ svc = def.getService(service);
+ port = (svc != null) ? svc.getPort(endpoint) : null;
}
- }
-
- protected void overrideDefinition(Definition def) {
- Service svc = def.getService(service);
- if (svc != null) {
- Port port = svc.getPort(endpoint);
- if (port != null) {
- port.getExtensibilityElements().clear();
- if (isSoap()) {
- SOAPAddress address = new SOAPAddressImpl();
- address.setLocationURI(getLocationURI());
- port.addExtensibilityElement(address);
- def.addNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
- } else {
- HTTPAddress address = new HTTPAddressImpl();
- address.setLocationURI(getLocationURI());
- port.addExtensibilityElement(address);
- def.addNamespace("http", "http://schemas.xmlsoap.org/wsdl/http/");
- }
- svc.getPorts().clear();
- svc.addPort(port);
- definition = def;
+ if (port != null) {
+ port.getExtensibilityElements().clear();
+ if (isSoap()) {
+ SOAPAddress address = new SOAPAddressImpl();
+ address.setLocationURI(getLocationURI());
+ port.addExtensibilityElement(address);
+ def.addNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
+ } else {
+ HTTPAddress address = new HTTPAddressImpl();
+ address.setLocationURI(getLocationURI());
+ port.addExtensibilityElement(address);
+ def.addNamespace("http", "http://schemas.xmlsoap.org/wsdl/http/");
}
+ svc.getPorts().clear();
+ svc.addPort(port);
+ definition = def;
}
}
- public Resource getWsdlResource() {
- return wsdlResource;
+ protected ExchangeProcessor createProviderProcessor() {
+ return new ProviderProcessor(this);
}
- public void setWsdlResource(Resource wsdlResource) {
- this.wsdlResource = wsdlResource;
+ protected ExchangeProcessor createConsumerProcessor() {
+ return new ConsumerProcessor(this);
}
- /**
- * @return Returns the defaultOperation.
- */
- public QName getDefaultOperation() {
- return defaultOperation;
- }
-
- /**
- * @param defaultOperation The defaultOperation to set.
- */
- public void setDefaultOperation(QName defaultOperation) {
- this.defaultOperation = defaultOperation;
+ protected ServiceEndpoint createExternalEndpoint() {
+ return new HttpExternalEndpoint(this);
}
}
Modified: incubator/servicemix/trunk/servicemix-http/src/test/java/org/apache/servicemix/http/HttpXBeanDeployerTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-http/src/test/java/org/apache/servicemix/http/HttpXBeanDeployerTest.java?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-http/src/test/java/org/apache/servicemix/http/HttpXBeanDeployerTest.java (original)
+++ incubator/servicemix/trunk/servicemix-http/src/test/java/org/apache/servicemix/http/HttpXBeanDeployerTest.java Mon Mar 27 10:15:05 2006
@@ -122,7 +122,7 @@
container.getRegistry().getExternalEndpointsForService(
new QName("http://test", "MySoapService"))[0]));
- // Test
+ // Test
DefaultServiceMixClient client = new DefaultServiceMixClient(container);
InOut me = client.createInOutExchange();
me.setService(new QName("http://test", "MyProviderService"));
Modified: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java (original)
+++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java Mon Mar 27 10:15:05 2006
@@ -15,29 +15,16 @@
*/
package org.apache.servicemix.jms;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
+import java.util.Iterator;
-import javax.jbi.component.ComponentContext;
-import javax.jbi.messaging.MessageExchange.Role;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.Service;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLReader;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.servicemix.common.ExchangeProcessor;
-import org.apache.servicemix.common.wsdl1.JbiExtension;
-import org.apache.servicemix.common.xbean.XBeanServiceUnit;
import org.apache.servicemix.jms.wsdl.JmsBinding;
import org.apache.servicemix.soap.SoapEndpoint;
-import org.springframework.core.io.Resource;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
/**
*
@@ -49,17 +36,7 @@
*/
public class JmsEndpoint extends SoapEndpoint {
- protected QName targetServiceName;
- protected String targetEndpointName;
protected JmsBinding binding;
- protected ExchangeProcessor processor;
- protected ServiceEndpoint activated;
- protected Role role;
- protected URI defaultMep;
- protected boolean soap;
- protected String soapVersion;
- protected Resource wsdlResource;
- protected QName defaultOperation;
// Jms informations
protected String initialContextFactory;
protected String jndiProviderURL;
@@ -83,246 +60,6 @@
public void setBinding(JmsBinding binding) {
this.binding = binding;
}
- /**
- * @return Returns the soap.
- */
- public boolean isSoap() {
- return soap;
- }
- /**
- * @param soap The soap to set.
- */
- public void setSoap(boolean soap) {
- this.soap = soap;
- }
-
- public String toString() {
- return "JMSEndpoint[service: " + service + ", " +
- "endpoint: " + endpoint + ", " +
- "address: " + jndiDestinationName + "(" + destinationStyle + "), " +
- "soap: " + soap + "]";
- }
-
- public ExchangeProcessor getProcessor() {
- return this.processor;
- }
-
- /* (non-Javadoc)
- * @see org.apache.servicemix.common.Endpoint#activate()
- */
- public void activate() throws Exception {
- ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
- loadWsdl();
- if (getRole() == Role.PROVIDER) {
- activated = ctx.activateEndpoint(service, endpoint);
- processor = new MultiplexingProviderProcessor(this);
- } else {
- activated = new JmsExternalEndpoint(this);
- ctx.registerExternalEndpoint(activated);
- processor = new MultiplexingConsumerProcessor(this);
- }
- processor.start();
- }
-
- /* (non-Javadoc)
- * @see org.apache.servicemix.common.Endpoint#deactivate()
- */
- public void deactivate() throws Exception {
- ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
- if (getRole() == Role.PROVIDER) {
- ServiceEndpoint ep = activated;
- activated = null;
- ctx.deactivateEndpoint(ep);
- } else {
- ServiceEndpoint ep = activated;
- activated = null;
- ctx.deregisterExternalEndpoint(ep);
- }
- processor.stop();
- }
-
- public Role getRole() {
- return this.role;
- }
-
- public void setRole(Role role) {
- this.role = role;
- }
-
- /**
- * @org.apache.xbean.Property alias="role"
- * @param role
- */
- public void setRoleAsString(String role) {
- if (role == null) {
- throw new IllegalArgumentException("Role must be specified");
- } else if (JbiExtension.ROLE_CONSUMER.equals(role)) {
- setRole(Role.CONSUMER);
- } else if (JbiExtension.ROLE_PROVIDER.equals(role)) {
- setRole(Role.PROVIDER);
- } else {
- throw new IllegalArgumentException("Unrecognized role: " + role);
- }
- }
-
- public void setDefaultMep(URI defaultMep) {
- this.defaultMep = defaultMep;
- }
-
- public URI getDefaultMep() {
- return defaultMep;
- }
-
- /**
- * @return Returns the defaultOperation.
- */
- public QName getDefaultOperation() {
- return defaultOperation;
- }
-
- /**
- * @param defaultOperation The defaultOperation to set.
- */
- public void setDefaultOperation(QName defaultOperation) {
- this.defaultOperation = defaultOperation;
- }
-
- /**
- * @return Returns the soapVersion.
- */
- public String getSoapVersion() {
- return soapVersion;
- }
-
- /**
- * @param soapVersion The soapVersion to set.
- */
- public void setSoapVersion(String soapVersion) {
- this.soapVersion = soapVersion;
- }
-
- /**
- * Load the wsdl for this endpoint.
- */
- protected void loadWsdl() {
- // Load WSDL from the resource
- if (description == null && wsdlResource != null) {
- InputStream is = null;
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- try {
- if (serviceUnit instanceof XBeanServiceUnit) {
- XBeanServiceUnit su = (XBeanServiceUnit) serviceUnit;
- Thread.currentThread().setContextClassLoader(su.getKernel().getClassLoaderFor(su.getConfiguration()));
- }
- is = wsdlResource.getInputStream();
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- Definition def = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, new InputSource(is));
- overrideDefinition(def);
- } catch (Exception e) {
- logger.warn("Could not load description from resource", e);
- } finally {
- Thread.currentThread().setContextClassLoader(cl);
- if (is != null) {
- try {
- is.close();
- } catch (IOException e) {
- // Ignore
- }
- }
- }
- }
- // If the endpoint is a consumer, try to find
- // the proxied endpoint description
- if (description == null && definition == null && getRole() == Role.CONSUMER) {
- retrieveProxiedEndpointDefinition();
- }
- // If the wsdl definition is provided,
- // convert it to a DOM document
- if (description == null && definition != null) {
- try {
- description = WSDLFactory.newInstance().newWSDLWriter().getDocument(definition);
- } catch (Exception e) {
- logger.warn("Could not create document from wsdl description", e);
- }
- }
- // If the dom description is provided
- // convert it to a WSDL definition
- if (definition == null && description != null) {
- try {
- definition = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, description);
- } catch (Exception e) {
- logger.warn("Could not create wsdl definition from dom document", e);
- }
- }
- }
-
- /**
- * Create a wsdl definition for a consumer endpoint.
- * Loads the target endpoint definition and add http binding
- * informations to it.
- */
- protected void retrieveProxiedEndpointDefinition() {
- try {
- if (service != null && endpoint != null) {
- ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
- ServiceEndpoint se = ctx.getEndpoint(service, endpoint);
- if (se != null) {
- Document doc = ctx.getEndpointDescriptor(se);
- if (doc != null) {
- WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
- Definition def = reader.readWSDL(null, doc);
- if (def != null) {
- overrideDefinition(def);
- }
- }
- }
- }
- } catch (Exception e) {
- logger.debug("Unable to retrieve target endpoint descriptor", e);
- }
- }
-
- protected void overrideDefinition(Definition def) {
- Service svc = def.getService(service);
- if (svc != null) {
- Port port = svc.getPort(endpoint);
- if (port != null) {
- port.getExtensibilityElements().clear();
- /*
- if (isSoap()) {
- SOAPAddress address = new SOAPAddressImpl();
- address.setLocationURI(getLocationURI());
- port.addExtensibilityElement(address);
- def.addNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
- } else {
- HTTPAddress address = new HTTPAddressImpl();
- address.setLocationURI(getLocationURI());
- port.addExtensibilityElement(address);
- def.addNamespace("http", "http://schemas.xmlsoap.org/wsdl/http/");
- }
- */
- // TODO: add binding information
- svc.getPorts().clear();
- svc.addPort(port);
- definition = def;
- }
- }
- }
-
- /**
- * @return Returns the wsdlResource.
- */
- public Resource getWsdlResource() {
- return wsdlResource;
- }
-
- /**
- * @param wsdlResource The wsdlResource to set.
- */
- public void setWsdlResource(Resource wsdlResource) {
- this.wsdlResource = wsdlResource;
- }
/**
* @return Returns the initialContextFactory.
@@ -409,31 +146,68 @@
}
/**
- * @return Returns the localEndpointName.
+ * @org.apache.xbean.Property alias="role"
+ * @param role
*/
- public String getTargetEndpointName() {
- return targetEndpointName;
+ public void setRoleAsString(String role) {
+ super.setRoleAsString(role);
}
- /**
- * @param localEndpointName The localEndpointName to set.
- */
- public void setTargetEndpointName(String localEndpointName) {
- this.targetEndpointName = localEndpointName;
+ protected ExchangeProcessor createProviderProcessor() {
+ return new MultiplexingProviderProcessor(this);
}
- /**
- * @return Returns the localServiceName.
- */
- public QName getTargetServiceName() {
- return targetServiceName;
+ protected ExchangeProcessor createConsumerProcessor() {
+ return new MultiplexingConsumerProcessor(this);
}
- /**
- * @param localServiceName The localServiceName to set.
- */
- public void setTargetServiceName(QName localServiceName) {
- this.targetServiceName = localServiceName;
+ protected ServiceEndpoint createExternalEndpoint() {
+ return new JmsExternalEndpoint(this);
}
+ protected void overrideDefinition(Definition def) {
+ Service svc = null;
+ Port port = null;
+ if (targetService != null && targetEndpoint != null) {
+ svc = def.getService(targetService);
+ port = (svc != null) ? svc.getPort(targetEndpoint) : null;
+ } else if (targetInterfaceName != null) {
+ Iterator it = def.getServices().values().iterator();
+ svc = it .hasNext() ? (Service) it.next() : null;
+ if (svc != null) {
+ it = svc.getPorts().values().iterator();
+ port = (it.hasNext()) ? (Port) it.next() : null;
+ }
+ } else {
+ svc = def.getService(service);
+ port = (svc != null) ? svc.getPort(endpoint) : null;
+ }
+ if (port != null) {
+ port.getExtensibilityElements().clear();
+ /*
+ if (isSoap()) {
+ SOAPAddress address = new SOAPAddressImpl();
+ address.setLocationURI(getLocationURI());
+ port.addExtensibilityElement(address);
+ def.addNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
+ } else {
+ HTTPAddress address = new HTTPAddressImpl();
+ address.setLocationURI(getLocationURI());
+ port.addExtensibilityElement(address);
+ def.addNamespace("http", "http://schemas.xmlsoap.org/wsdl/http/");
+ }
+ */
+ // TODO: add binding information
+ svc.getPorts().clear();
+ svc.addPort(port);
+ definition = def;
+ }
+ }
+
+ public String toString() {
+ return "JMSEndpoint[service: " + service + ", " +
+ "endpoint: " + endpoint + ", " +
+ "address: " + jndiDestinationName + "(" + destinationStyle + "), " +
+ "soap: " + soap + "]";
+ }
}
Modified: incubator/servicemix/trunk/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsXBeanDeployerTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsXBeanDeployerTest.java?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsXBeanDeployerTest.java (original)
+++ incubator/servicemix/trunk/servicemix-jms/src/test/java/org/apache/servicemix/jms/JmsXBeanDeployerTest.java Mon Mar 27 10:15:05 2006
@@ -98,6 +98,7 @@
type.setUndefined(false);
type.setQName(new QName("http://test", "MyConsumerInterface"));
Binding binding = def.createBinding();
+ binding.setQName(new QName("http://test", "MyConsumerBinding"));
binding.setUndefined(false);
binding.setPortType(type);
Service svc = def.createService();
@@ -176,7 +177,7 @@
binding.setUndefined(false);
binding.setPortType(type);
Service svc = def.createService();
- svc.setQName(new QName("http://test", "MySoapConsumerService"));
+ svc.setQName(new QName("http://test", "MyConsumerService"));
Port port = def.createPort();
port.setBinding(binding);
port.setName("myConsumer");
@@ -194,7 +195,7 @@
}
});
asEcho.setEndpoint("myConsumer");
- asEcho.setService(new QName("http://test", "MySoapConsumerService"));
+ asEcho.setService(new QName("http://test", "MyConsumerService"));
container.activateComponent(asEcho);
// Start container
@@ -210,12 +211,12 @@
// Test wsdls
assertNotNull(container.getRegistry().getEndpointDescriptor(
container.getRegistry().getExternalEndpointsForService(
- new QName("http://test", "MySoapConsumerService"))[0]));
+ new QName("http://test", "MyConsumerService"))[0]));
// Test
DefaultServiceMixClient client = new DefaultServiceMixClient(container);
InOut me = client.createInOutExchange();
- me.setService(new QName("http://test", "MySoapProviderService"));
+ me.setService(new QName("http://test", "MyProviderService"));
me.getInMessage().setContent(new StringSource("<echo xmlns='http://test'><echoin0>world</echoin0></echo>"));
client.sendSync(me);
if (me.getStatus() == ExchangeStatus.ERROR) {
Modified: incubator/servicemix/trunk/servicemix-jms/src/test/resources/xbean/xbean.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/test/resources/xbean/xbean.xml?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-jms/src/test/resources/xbean/xbean.xml (original)
+++ incubator/servicemix/trunk/servicemix-jms/src/test/resources/xbean/xbean.xml Mon Mar 27 10:15:05 2006
@@ -10,7 +10,9 @@
<!-- START SNIPPET: consumer -->
<jms:endpoint service="test:MyConsumerService"
- endpoint="myConsumer"
+ endpoint="jms"
+ targetService="test:MyConsumerService"
+ targetEndpoint="myConsumer"
role="consumer"
destinationStyle="queue"
jmsProviderDestinationName="queue/A"
@@ -19,8 +21,9 @@
defaultOperation="test:Echo" />
<!-- END SNIPPET: consumer -->
- <jms:endpoint service="test:MySoapConsumerService"
- endpoint="myConsumer"
+ <jms:endpoint service="test:MyConsumerService"
+ endpoint="jms+soap"
+ targetInterfaceName="test:MyConsumerInterface"
role="consumer"
destinationStyle="queue"
jmsProviderDestinationName="queue/A/Soap"
Modified: incubator/servicemix/trunk/servicemix-soap/project.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-soap/project.xml?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-soap/project.xml (original)
+++ incubator/servicemix/trunk/servicemix-soap/project.xml Mon Mar 27 10:15:05 2006
@@ -65,6 +65,26 @@
<eclipse.dependency>true</eclipse.dependency>
</properties>
</dependency>
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-spring</artifactId>
+ <version>${xbean_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-server</artifactId>
+ <version>${xbean_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-kernel</artifactId>
+ <version>${xbean_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>${spring_version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
Modified: incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapEndpoint.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapEndpoint.java?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapEndpoint.java (original)
+++ incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapEndpoint.java Mon Mar 27 10:15:05 2006
@@ -15,16 +15,310 @@
*/
package org.apache.servicemix.soap;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.messaging.MessageExchange.Role;
+import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.wsdl.Definition;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.common.ExchangeProcessor;
+import org.apache.servicemix.common.wsdl1.JbiExtension;
+import org.apache.servicemix.common.xbean.XBeanServiceUnit;
+import org.springframework.core.io.Resource;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
public abstract class SoapEndpoint extends Endpoint {
- public abstract URI getDefaultMep();
+ protected ServiceEndpoint activated;
+ protected ExchangeProcessor processor;
+ protected Role role;
+ protected URI defaultMep;
+ protected boolean soap;
+ protected String soapVersion;
+ protected Resource wsdlResource;
+ protected QName defaultOperation;
+ protected QName targetInterfaceName;
+ protected QName targetService;
+ protected String targetEndpoint;
+
+ /**
+ * @return Returns the defaultMep.
+ */
+ public URI getDefaultMep() {
+ return defaultMep;
+ }
+ /**
+ * @param defaultMep The defaultMep to set.
+ */
+ public void setDefaultMep(URI defaultMep) {
+ this.defaultMep = defaultMep;
+ }
+ /**
+ * @return Returns the defaultOperation.
+ */
+ public QName getDefaultOperation() {
+ return defaultOperation;
+ }
+ /**
+ * @param defaultOperation The defaultOperation to set.
+ */
+ public void setDefaultOperation(QName defaultOperation) {
+ this.defaultOperation = defaultOperation;
+ }
+ /**
+ * @return Returns the role.
+ */
+ public Role getRole() {
+ return role;
+ }
+ /**
+ * @param role The role to set.
+ */
+ public void setRole(Role role) {
+ this.role = role;
+ }
+ /**
+ * @return Returns the soap.
+ */
+ public boolean isSoap() {
+ return soap;
+ }
+ /**
+ * @param soap The soap to set.
+ */
+ public void setSoap(boolean soap) {
+ this.soap = soap;
+ }
+ /**
+ * @return Returns the soapVersion.
+ */
+ public String getSoapVersion() {
+ return soapVersion;
+ }
+ /**
+ * @param soapVersion The soapVersion to set.
+ */
+ public void setSoapVersion(String soapVersion) {
+ this.soapVersion = soapVersion;
+ }
+ /**
+ * @return Returns the targetEndpoint.
+ */
+ public String getTargetEndpoint() {
+ return targetEndpoint;
+ }
+ /**
+ * @param targetEndpoint The targetEndpoint to set.
+ */
+ public void setTargetEndpoint(String targetEndpoint) {
+ this.targetEndpoint = targetEndpoint;
+ }
+ /**
+ * @return Returns the targetInterfaceName.
+ */
+ public QName getTargetInterfaceName() {
+ return targetInterfaceName;
+ }
+ /**
+ * @param targetInterfaceName The targetInterfaceName to set.
+ */
+ public void setTargetInterfaceName(QName targetInterfaceName) {
+ this.targetInterfaceName = targetInterfaceName;
+ }
+ /**
+ * @return Returns the targetServiceName.
+ */
+ public QName getTargetService() {
+ return targetService;
+ }
+ /**
+ * @param targetServiceName The targetServiceName to set.
+ */
+ public void setTargetService(QName targetServiceName) {
+ this.targetService = targetServiceName;
+ }
+ /**
+ * @return Returns the wsdlResource.
+ */
+ public Resource getWsdlResource() {
+ return wsdlResource;
+ }
+ /**
+ * @param wsdlResource The wsdlResource to set.
+ */
+ public void setWsdlResource(Resource wsdlResource) {
+ this.wsdlResource = wsdlResource;
+ }
+ /**
+ * @org.apache.xbean.Property alias="role"
+ * @param role
+ */
+ public void setRoleAsString(String role) {
+ if (role == null) {
+ throw new IllegalArgumentException("Role must be specified");
+ } else if (JbiExtension.ROLE_CONSUMER.equals(role)) {
+ setRole(Role.CONSUMER);
+ } else if (JbiExtension.ROLE_PROVIDER.equals(role)) {
+ setRole(Role.PROVIDER);
+ } else {
+ throw new IllegalArgumentException("Unrecognized role: " + role);
+ }
+ }
+
+ /**
+ * Load the wsdl for this endpoint.
+ */
+ protected void loadWsdl() {
+ // Load WSDL from the resource
+ if (description == null && wsdlResource != null) {
+ InputStream is = null;
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ try {
+ if (serviceUnit instanceof XBeanServiceUnit) {
+ XBeanServiceUnit su = (XBeanServiceUnit) serviceUnit;
+ Thread.currentThread().setContextClassLoader(su.getKernel().getClassLoaderFor(su.getConfiguration()));
+ }
+ is = wsdlResource.getInputStream();
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setNamespaceAware(true);
+ Definition def = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, new InputSource(is));
+ overrideDefinition(def);
+ } catch (Exception e) {
+ logger.warn("Could not load description from resource", e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(cl);
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ // Ignore
+ }
+ }
+ }
+ }
+ // If the endpoint is a consumer, try to find
+ // the proxied endpoint description
+ if (description == null && definition == null && getRole() == Role.CONSUMER) {
+ retrieveProxiedEndpointDefinition();
+ }
+ // If the wsdl definition is provided,
+ // convert it to a DOM document
+ if (description == null && definition != null) {
+ try {
+ description = WSDLFactory.newInstance().newWSDLWriter().getDocument(definition);
+ } catch (Exception e) {
+ logger.warn("Could not create document from wsdl description", e);
+ }
+ }
+ // If the dom description is provided
+ // convert it to a WSDL definition
+ if (definition == null && description != null) {
+ try {
+ definition = WSDLFactory.newInstance().newWSDLReader().readWSDL(null, description);
+ } catch (Exception e) {
+ logger.warn("Could not create wsdl definition from dom document", e);
+ }
+ }
+ }
+
+ /**
+ * Create a wsdl definition for a consumer endpoint.
+ * Loads the target endpoint definition and add http binding
+ * informations to it.
+ */
+ protected void retrieveProxiedEndpointDefinition() {
+ try {
+ ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
+ ServiceEndpoint ep = null;
+ if (targetService != null && targetEndpoint != null) {
+ ep = ctx.getEndpoint(targetService, targetEndpoint);
+ }
+ if (ep == null && targetService != null) {
+ ServiceEndpoint[] eps = ctx.getEndpointsForService(targetService);
+ if (eps != null && eps.length > 0) {
+ ep = eps[0];
+ }
+ }
+ if (ep == null && targetInterfaceName != null) {
+ ServiceEndpoint[] eps = ctx.getEndpoints(targetInterfaceName);
+ if (eps != null && eps.length > 0) {
+ ep = eps[0];
+ }
+ }
+ if (ep == null && service != null && endpoint != null) {
+ ep = ctx.getEndpoint(service, endpoint);
+ }
+ if (ep != null) {
+ Document doc = ctx.getEndpointDescriptor(ep);
+ if (doc != null) {
+ WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
+ Definition def = reader.readWSDL(null, doc);
+ if (def != null) {
+ overrideDefinition(def);
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.debug("Unable to retrieve target endpoint descriptor", e);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.common.Endpoint#getProcessor()
+ */
+ public ExchangeProcessor getProcessor() {
+ return this.processor;
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.Endpoint#activate()
+ */
+ public void activate() throws Exception {
+ ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
+ loadWsdl();
+ if (getRole() == Role.PROVIDER) {
+ activated = ctx.activateEndpoint(service, endpoint);
+ processor = createProviderProcessor();
+ } else {
+ activated = createExternalEndpoint();
+ ctx.registerExternalEndpoint(activated);
+ processor = createConsumerProcessor();
+ }
+ processor.start();
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.Endpoint#deactivate()
+ */
+ public void deactivate() throws Exception {
+ ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
+ if (getRole() == Role.PROVIDER) {
+ ServiceEndpoint ep = activated;
+ activated = null;
+ ctx.deactivateEndpoint(ep);
+ } else {
+ ServiceEndpoint ep = activated;
+ activated = null;
+ ctx.deregisterExternalEndpoint(ep);
+ }
+ processor.stop();
+ }
+
+ protected abstract void overrideDefinition(Definition def);
+
+ protected abstract ExchangeProcessor createProviderProcessor();
+
+ protected abstract ExchangeProcessor createConsumerProcessor();
+
+ protected abstract ServiceEndpoint createExternalEndpoint();
- public abstract QName getDefaultOperation();
-
}
Modified: incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapHelper.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapHelper.java?rev=389216&r1=389215&r2=389216&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapHelper.java (original)
+++ incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/SoapHelper.java Mon Mar 27 10:15:05 2006
@@ -82,9 +82,20 @@
} else {
context.setProperty(Context.OPERATION, message.getBodyName());
}
- context.setProperty(Context.INTERFACE, endpoint.getInterfaceName());
- context.setProperty(Context.SERVICE, endpoint.getService());
- context.setProperty(Context.ENDPOINT, endpoint.getEndpoint());
+ // If no target endpoint / service / interface is defined
+ // we assume we use the same informations has defined on the
+ // external endpoint
+ if (endpoint.getTargetInterfaceName() == null &&
+ endpoint.getTargetService() == null &&
+ endpoint.getTargetEndpoint() == null) {
+ context.setProperty(Context.INTERFACE, endpoint.getInterfaceName());
+ context.setProperty(Context.SERVICE, endpoint.getService());
+ context.setProperty(Context.ENDPOINT, endpoint.getEndpoint());
+ } else {
+ context.setProperty(Context.INTERFACE, endpoint.getTargetInterfaceName());
+ context.setProperty(Context.SERVICE, endpoint.getTargetService());
+ context.setProperty(Context.ENDPOINT, endpoint.getTargetEndpoint());
+ }
return context;
}