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/04/07 15:21:45 UTC
svn commit: r392284 - in /incubator/servicemix/trunk/servicemix-wsn2005: ./
src/main/java/org/apache/servicemix/wsn/component/ src/main/resources/org/
src/main/resources/org/apache/ src/main/resources/org/apache/servicemix/
src/main/resources/org/apach...
Author: gnodet
Date: Fri Apr 7 06:21:37 2006
New Revision: 392284
URL: http://svn.apache.org/viewcvs?rev=392284&view=rev
Log:
SM-304: expose WSDL for WS-Notification endpoints
Added:
incubator/servicemix/trunk/servicemix-wsn2005/src/main/resources/org/
incubator/servicemix/trunk/servicemix-wsn2005/src/main/resources/org/apache/
incubator/servicemix/trunk/servicemix-wsn2005/src/main/resources/org/apache/servicemix/
incubator/servicemix/trunk/servicemix-wsn2005/src/main/resources/org/apache/servicemix/wsn/
- copied from r391748, incubator/servicemix/trunk/servicemix-wsn2005/src/main/wsdl/
Removed:
incubator/servicemix/trunk/servicemix-wsn2005/src/main/wsdl/
incubator/servicemix/trunk/servicemix-wsn2005/src/test/resources/org/servicemix/
Modified:
incubator/servicemix/trunk/servicemix-wsn2005/project.properties
incubator/servicemix/trunk/servicemix-wsn2005/project.xml
incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java
incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java
incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNLifeCycle.java
incubator/servicemix/trunk/servicemix-wsn2005/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java
Modified: incubator/servicemix/trunk/servicemix-wsn2005/project.properties
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-wsn2005/project.properties?rev=392284&r1=392283&r2=392284&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-wsn2005/project.properties (original)
+++ incubator/servicemix/trunk/servicemix-wsn2005/project.properties Fri Apr 7 06:21:37 2006
@@ -23,7 +23,7 @@
# -------------------------------------------------------------------
lib.home=lib
etc.home=etc
-wsdl.home=${basedir}/src/main/wsdl
+wsdl.home=${basedir}/src/main/resources/org/apache/servicemix/wsn
debug=true
verbose=false
Modified: incubator/servicemix/trunk/servicemix-wsn2005/project.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-wsn2005/project.xml?rev=392284&r1=392283&r2=392284&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-wsn2005/project.xml (original)
+++ incubator/servicemix/trunk/servicemix-wsn2005/project.xml Fri Apr 7 06:21:37 2006
@@ -43,6 +43,9 @@
<groupId>servicemix</groupId>
<artifactId>jsr181-api</artifactId>
<version>${jaxws_rt_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
</dependency>
<dependency>
<groupId>servicemix</groupId>
@@ -58,11 +61,17 @@
<groupId>servicemix</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxws_rt_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
</dependency>
<dependency>
<groupId>servicemix</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxws_rt_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
</dependency>
<dependency>
<groupId>servicemix</groupId>
Modified: incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java?rev=392284&r1=392283&r2=392284&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java (original)
+++ incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNComponent.java Fri Apr 7 06:21:37 2006
@@ -15,15 +15,31 @@
*/
package org.apache.servicemix.wsn.component;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jbi.servicedesc.ServiceEndpoint;
import javax.jms.ConnectionFactory;
+import javax.wsdl.Definition;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
import org.apache.servicemix.common.BaseComponent;
import org.apache.servicemix.common.BaseLifeCycle;
import org.apache.servicemix.common.BaseServiceUnitManager;
import org.apache.servicemix.common.Deployer;
+import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.common.EndpointSupport;
+import org.apache.servicemix.common.tools.wsdl.WSDLFlattener;
+import org.w3c.dom.Document;
public class WSNComponent extends BaseComponent {
+ private WSDLFlattener flattener;
+ private Map descriptions;
+
@Override
protected BaseLifeCycle createLifeCycle() {
return new WSNLifeCycle(this);
@@ -42,5 +58,59 @@
public void setConnectionFactory(ConnectionFactory connectionFactory) {
((WSNLifeCycle) lifeCycle).setConnectionFactory(connectionFactory);
}
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.common.BaseComponent#getServiceDescription(javax.jbi.servicedesc.ServiceEndpoint)
+ */
+ @Override
+ public Document getServiceDescription(ServiceEndpoint endpoint) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Querying service description for " + endpoint);
+ }
+ String key = EndpointSupport.getKey(endpoint);
+ Endpoint ep = this.registry.getEndpoint(key);
+ if (ep != null) {
+ QName interfaceName = ep.getInterfaceName();
+ if (interfaceName == null) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Could not retrieve description for endpoint " + key + " (no interface defined)");
+ }
+ return null;
+ }
+ Document doc = getDescription(interfaceName);
+ return doc;
+ } else {
+ if (logger.isDebugEnabled()) {
+ logger.debug("No endpoint found for " + key);
+ }
+ return null;
+ }
+ }
+
+ private synchronized Document getDescription(QName interfaceName) {
+ try {
+ if (descriptions == null) {
+ descriptions = new HashMap();
+ }
+ Document doc = (Document) descriptions.get(interfaceName);
+ if (doc == null) {
+ if (flattener == null) {
+ URL resource = getClass().getClassLoader().getResource("org/apache/servicemix/wsn/wsn.wsdl");
+ WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
+ Definition definition = reader.readWSDL(null, resource.toString());
+ flattener = new WSDLFlattener(definition);
+ }
+ Definition flatDef = flattener.getDefinition(interfaceName);
+ doc = WSDLFactory.newInstance().newWSDLWriter().getDocument(flatDef);
+ descriptions.put(interfaceName, doc);
+ }
+ return doc;
+ } catch (Exception e) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Error retrieving endpoint description", e);
+ }
+ return null;
+ }
+ }
}
Modified: incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java?rev=392284&r1=392283&r2=392284&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java (original)
+++ incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNEndpoint.java Fri Apr 7 06:21:37 2006
@@ -70,21 +70,21 @@
@Override
public void activate() throws Exception {
logger = this.serviceUnit.getComponent().getLogger();
+ WebService ws = getWebServiceAnnotation(pojo.getClass());
+ if (ws == null) {
+ throw new IllegalStateException("Unable to find WebService annotation");
+ }
+ endpointInterface = Class.forName(ws.endpointInterface());
+ jaxbContext = createJAXBContext(endpointInterface);
+ ws = getWebServiceAnnotation(endpointInterface);
+ if (ws != null) {
+ interfaceName = new QName(ws.targetNamespace(), ws.name());
+ }
ComponentContext ctx = this.serviceUnit.getComponent().getComponentContext();
activated = ctx.activateEndpoint(service, endpoint);
channel = ctx.getDeliveryChannel();
- jaxbContext = createJAXBContext();
}
- protected JAXBContext createJAXBContext() throws Exception {
- WebService ws = getWebServiceAnnotation();
- if (ws == null) {
- throw new IllegalStateException("Unable to find WebService annotation");
- }
- endpointInterface = Class.forName(ws.endpointInterface());
- return createJAXBContext(endpointInterface);
- }
-
public static JAXBContext createJAXBContext(Class interfaceClass) throws JAXBException {
List<Class> classes = new ArrayList<Class>();
classes.add(JbiFault.class);
@@ -186,7 +186,7 @@
}
protected Method getWebServiceMethod(QName interfaceName, QName operation) throws Exception {
- WebService ws = getWebServiceAnnotation();
+ WebService ws = getWebServiceAnnotation(pojo.getClass());
if (ws == null) {
throw new IllegalStateException("Unable to find WebService annotation");
}
@@ -201,8 +201,8 @@
}
@SuppressWarnings("unchecked")
- protected WebService getWebServiceAnnotation() {
- for (Class cl = pojo.getClass(); cl != null; cl = cl.getSuperclass()) {
+ protected WebService getWebServiceAnnotation(Class clazz) {
+ for (Class cl = clazz; cl != null; cl = cl.getSuperclass()) {
WebService ws = (WebService) cl.getAnnotation(WebService.class);
if (ws != null) {
return ws;
Modified: incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNLifeCycle.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNLifeCycle.java?rev=392284&r1=392283&r2=392284&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNLifeCycle.java (original)
+++ incubator/servicemix/trunk/servicemix-wsn2005/src/main/java/org/apache/servicemix/wsn/component/WSNLifeCycle.java Fri Apr 7 06:21:37 2006
@@ -118,29 +118,25 @@
public class WSNEndpointManager implements EndpointManager {
public Object register(String address, Object service) throws EndpointRegistrationException {
- component.getRegistry().unregisterServiceUnit(serviceUnit);
try {
WSNEndpoint endpoint = new WSNEndpoint(address, service);
endpoint.setServiceUnit(serviceUnit);
- endpoint.activate();
serviceUnit.addEndpoint(endpoint);
+ component.getRegistry().registerEndpoint(endpoint);
+ endpoint.activate();
return endpoint;
} catch (Exception e) {
throw new EndpointRegistrationException("Unable to activate endpoint", e);
- } finally {
- component.getRegistry().registerServiceUnit(serviceUnit);
}
}
public void unregister(Object endpoint) throws EndpointRegistrationException {
- component.getRegistry().unregisterServiceUnit(serviceUnit);
try {
+ serviceUnit.getEndpoints().remove(endpoint);
+ component.getRegistry().unregisterEndpoint((WSNEndpoint) endpoint);
((WSNEndpoint) endpoint).deactivate();
} catch (Exception e) {
throw new EndpointRegistrationException("Unable to activate endpoint", e);
- } finally {
- serviceUnit.getEndpoints().remove(endpoint);
- component.getRegistry().registerServiceUnit(serviceUnit);
}
}
Modified: incubator/servicemix/trunk/servicemix-wsn2005/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-wsn2005/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java?rev=392284&r1=392283&r2=392284&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-wsn2005/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java (original)
+++ incubator/servicemix/trunk/servicemix-wsn2005/src/test/java/org/apache/servicemix/wsn/component/WSNComponentTest.java Fri Apr 7 06:21:37 2006
@@ -27,6 +27,7 @@
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.servicedesc.ServiceEndpoint;
import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
@@ -103,6 +104,13 @@
jmsBroker.stop();
}
}
+
+ public void testWSDL() throws Exception {
+ ServiceEndpoint[] ses = jbi.getRegistry().getEndpointsForInterface(
+ new QName("http://docs.oasis-open.org/wsn/brw-2", "NotificationBroker"));
+ assertNotNull(ses);
+ assertEquals(1, ses.length);
+ }
public void testInvalidSubscribription() throws Exception {
try {