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() {