Title: [993] trunk/servicemix-jsr181/src/test/java/org/servicemix/jsr181: Add discovery of service interface if the pojo implements a single interface.
Revision
993
Author
gnt
Date
2005-12-02 15:03:04 -0500 (Fri, 02 Dec 2005)

Log Message

Add discovery of service interface if the pojo implements a single interface.
JbiChannel now sets the DONE status on ERROR exchanges.

Modified Paths

Diff

Modified: trunk/servicemix-jsr181/src/main/java/org/servicemix/jsr181/Jsr181Endpoint.java (992 => 993)

--- trunk/servicemix-jsr181/src/main/java/org/servicemix/jsr181/Jsr181Endpoint.java	2005-12-02 17:19:23 UTC (rev 992)
+++ trunk/servicemix-jsr181/src/main/java/org/servicemix/jsr181/Jsr181Endpoint.java	2005-12-02 20:03:04 UTC (rev 993)
@@ -172,6 +172,14 @@
             Class cl = Class.forName(pojoClass);
             pojo = cl.newInstance();
         }
+        // Auto determine service interface
+        Class serviceInterface;
+        Class[] interfaces = pojo.getClass().getInterfaces();
+        if (interfaces != null && interfaces.length == 1) {
+            serviceInterface = interfaces[0];
+        } else {
+            serviceInterface = pojo.getClass();
+        }
         // Determine annotations
         WebAnnotations wa = null;
         String selectedAnnotations = null;
@@ -231,7 +239,7 @@
         String svcNamespace = (service != null) ? service.getNamespaceURI() : null;
         Map props = new HashMap();
         props.put(ObjectServiceFactory.PORT_TYPE, interfaceName);
-        xfireService = factory.create(getPojo().getClass(), svcLocalName, svcNamespace, props);
+        xfireService = factory.create(serviceInterface, svcLocalName, svcNamespace, props);
         xfireService.setInvoker(new BeanInvoker(getPojo()));
         xfire.getServiceRegistry().register(xfireService);
         xfire.getTransportManager().disableAll(xfireService);

Modified: trunk/servicemix-jsr181/src/main/java/org/servicemix/jsr181/xfire/JbiChannel.java (992 => 993)

--- trunk/servicemix-jsr181/src/main/java/org/servicemix/jsr181/xfire/JbiChannel.java	2005-12-02 17:19:23 UTC (rev 992)
+++ trunk/servicemix-jsr181/src/main/java/org/servicemix/jsr181/xfire/JbiChannel.java	2005-12-02 20:03:04 UTC (rev 993)
@@ -92,9 +92,12 @@
                         throw new XFireException("Unable to send jbi exchange: sendSync returned false");
                     }
                     if (me.getStatus() == ExchangeStatus.ERROR) {
+                        me.setStatus(ExchangeStatus.DONE);
+                        channel.send(me);
                         if (me.getError() != null) {
                             throw new XFireFault(me.getError(), XFireFault.RECEIVER);
                         } else if (me.getFault() != null){
+                            // TODO: retrieve fault
                             throw new XFireFault("Fault received", XFireFault.RECEIVER);
                         } else {
                             throw new XFireFault("Unkown Error", XFireFault.RECEIVER);

Modified: trunk/servicemix-jsr181/src/test/java/org/servicemix/jsr181/Jsr181ComplexPojoTest.java (992 => 993)

--- trunk/servicemix-jsr181/src/test/java/org/servicemix/jsr181/Jsr181ComplexPojoTest.java	2005-12-02 17:19:23 UTC (rev 992)
+++ trunk/servicemix-jsr181/src/test/java/org/servicemix/jsr181/Jsr181ComplexPojoTest.java	2005-12-02 20:03:04 UTC (rev 993)
@@ -63,7 +63,7 @@
     public void testComplexOneWay() throws Exception {
         Jsr181SpringComponent component = new Jsr181SpringComponent();
         Jsr181Endpoint endpoint = new Jsr181Endpoint();
-        endpoint.setPojo(new ComplexPojo());
+        endpoint.setPojo(new ComplexPojoImpl());
         component.setEndpoints(new Jsr181Endpoint[] { endpoint });
         container.activateComponent(component, "JSR181Component");
         
@@ -85,7 +85,7 @@
     public void testComplexTwoWay() throws Exception {
         Jsr181SpringComponent component = new Jsr181SpringComponent();
         Jsr181Endpoint endpoint = new Jsr181Endpoint();
-        endpoint.setPojo(new ComplexPojo());
+        endpoint.setPojo(new ComplexPojoImpl());
         component.setEndpoints(new Jsr181Endpoint[] { endpoint });
         container.activateComponent(component, "JSR181Component");
         
@@ -109,7 +109,12 @@
         Thread.sleep(100);
     }
     
-    public static class ComplexPojo {
+    public interface ComplexPojo {
+        public void oneWay(Source src) throws Exception;
+        public Source twoWay(Source src) throws Exception;
+    }
+    
+    public static class ComplexPojoImpl implements ComplexPojo {
         private ComponentContext context;
 
         public ComponentContext getContext() {

Reply via email to