You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2009/04/30 17:26:39 UTC

svn commit: r770283 - in /tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms: provider/ wireformat/jmsbytesxml/runtime/

Author: slaws
Date: Thu Apr 30 15:26:38 2009
New Revision: 770283

URL: http://svn.apache.org/viewvc?rev=770283&view=rev
Log:
TUSCANY-2965 - add fault handling code for wireFormat.bytesXML

Modified:
    tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java
    tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLProviderFactory.java
    tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceInterceptor.java
    tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceProvider.java
    tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLServiceProvider.java

Modified: tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java?rev=770283&r1=770282&r2=770283&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java Thu Apr 30 15:26:38 2009
@@ -32,13 +32,15 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
+import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
 
 /**
  * MessageProcessor for sending/receiving XML javax.jms.BytesMessage with the JMSBinding.
  */
 public class XMLBytesMessageProcessor extends AbstractMessageProcessor {
-    private static final Logger logger = Logger.getLogger(AbstractMessageProcessor.class.getName());
+    private static final Logger logger = Logger.getLogger(XMLBytesMessageProcessor.class.getName());
 
     public XMLBytesMessageProcessor(JMSBinding jmsBinding) {
         super(jmsBinding);
@@ -55,6 +57,7 @@
             long noOfBytes = ((BytesMessage)msg).getBodyLength();
             byte [] bytes = new byte[(int)noOfBytes];
             ((BytesMessage)msg).readBytes(bytes);
+            ((BytesMessage)msg).reset();
             
             Object os;
             if (noOfBytes > 0) {
@@ -73,6 +76,15 @@
     }
 
     @Override
+    public Object extractPayloadFromJMSMessage(Message msg) {
+        if (msg instanceof BytesMessage) {
+            return extractPayload(msg);
+        } else {
+            return super.extractPayloadFromJMSMessage(msg);
+        }
+    }
+
+    @Override
     protected Message createJMSMessage(Session session, Object o) {
         if (session == null) {
             logger.fine("no response session to create message: " + String.valueOf(o));
@@ -95,5 +107,28 @@
             throw new JMSBindingException(e);
         }
     }
+    
+    @Override
+    public Message createFaultMessage(Session session, Throwable o) {
+
+        if (session == null) {
+            logger.fine("no response session to create fault message: " + String.valueOf(o));
+            return null;
+        }
+        if (o instanceof FaultException) {
+            try {
+
+                BytesMessage message = session.createBytesMessage();
+                message.writeBytes(String.valueOf(((FaultException) o).getFaultInfo()).getBytes());
+                message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, true);
+                return message;
+
+            } catch (JMSException e) {
+                throw new JMSBindingException(e);
+            }
+        } else {
+            return super.createFaultMessage(session, o);
+        }
+    }
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLProviderFactory.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLProviderFactory.java?rev=770283&r1=770282&r2=770283&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLProviderFactory.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLProviderFactory.java Thu Apr 30 15:26:38 2009
@@ -20,6 +20,9 @@
 package org.apache.tuscany.sca.binding.jms.wireformat.jmsbytesxml.runtime;
 
 import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
+import org.apache.tuscany.sca.binding.jms.provider.JMSResourceFactory;
+import org.apache.tuscany.sca.binding.jms.provider.JMSResourceFactoryExtensionPoint;
 import org.apache.tuscany.sca.binding.jms.wireformat.jmsbytes.WireFormatJMSBytes;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.provider.WireFormatProvider;
@@ -31,10 +34,12 @@
 
 public class WireFormatJMSBytesXMLProviderFactory implements WireFormatProviderFactory<WireFormatJMSBytes> {
     private ExtensionPointRegistry registry;
+    private JMSResourceFactoryExtensionPoint jmsRFEP;
     
     public WireFormatJMSBytesXMLProviderFactory(ExtensionPointRegistry registry) {
         super();
         this.registry = registry;
+        jmsRFEP = (JMSResourceFactoryExtensionPoint)registry.getExtensionPoint(JMSResourceFactoryExtensionPoint.class);
     }
 
     /**
@@ -50,7 +55,8 @@
     public WireFormatProvider createServiceWireFormatProvider(RuntimeComponent component,
                                                               RuntimeComponentService service,
                                                               Binding binding) {
-        return new WireFormatJMSBytesXMLServiceProvider(registry, component, service, binding);
+        JMSResourceFactory jmsRF = jmsRFEP.createJMSResourceFactory((JMSBinding)binding);
+        return new WireFormatJMSBytesXMLServiceProvider(registry, component, service, binding, jmsRF);
     }
 
     /**

Modified: tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceInterceptor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceInterceptor.java?rev=770283&r1=770282&r2=770283&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceInterceptor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceInterceptor.java Thu Apr 30 15:26:38 2009
@@ -18,17 +18,20 @@
  */
 package org.apache.tuscany.sca.binding.jms.wireformat.jmsbytesxml.runtime;
 
-import java.lang.reflect.InvocationTargetException;
 import javax.jms.JMSException;
 import javax.jms.Session;
+import javax.xml.namespace.QName;
 
+import org.apache.axiom.om.OMElement;
 import org.apache.tuscany.sca.binding.jms.context.JMSBindingContext;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
+import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException;
 import org.apache.tuscany.sca.binding.jms.provider.JMSMessageProcessor;
 import org.apache.tuscany.sca.binding.jms.provider.JMSMessageProcessorUtil;
 import org.apache.tuscany.sca.binding.jms.provider.JMSResourceFactory;
 import org.apache.tuscany.sca.binding.jms.wireformat.jmsbytesxml.WireFormatJMSBytesXML;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
 import org.apache.tuscany.sca.invocation.Interceptor;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
@@ -73,13 +76,7 @@
             JMSBindingContext context = msg.getBindingContext();
             Session session = context.getJmsSession();
             
-            Object[] requestParams = msg.getBody();
-            javax.jms.Message requestMsg = null;
-            if (requestParams != null && requestParams.length > 0 ){
-                requestMsg = requestMessageProcessor.insertPayloadIntoJMSMessage(session, requestParams[0]);
-            } else {
-                requestMsg = requestMessageProcessor.insertPayloadIntoJMSMessage(session, null);
-            }
+            javax.jms.Message requestMsg = requestMessageProcessor.insertPayloadIntoJMSMessage(session, msg.getBody());
             
             msg.setBody(requestMsg);
             
@@ -93,20 +90,27 @@
     
     public Message invokeResponse(Message msg) {
         if (msg.getBody() != null){
-            Object response = responseMessageProcessor.extractPayloadFromJMSMessage((javax.jms.Message)msg.getBody());
-            if (response instanceof InvocationTargetException) {
-                msg.setFaultBody(((InvocationTargetException) response).getCause());
-            } else {
-                if (response != null){
-                    msg.setBody(response);
-                } else {
-                    msg.setBody(null);
+            javax.jms.Message jmsMsg = (javax.jms.Message)msg.getBody();
+            Object response = responseMessageProcessor.extractPayloadFromJMSMessage(jmsMsg);
+            if (response != null ){
+                msg.setBody(response);
+                try {
+                    if (jmsMsg.getBooleanProperty(JMSBindingConstants.FAULT_PROPERTY)) {
+                        FaultException e = new FaultException("remote exception", response);
+                        OMElement om = (OMElement) response;
+                        e.setFaultName(new QName(om.getNamespace().getNamespaceURI(), om.getLocalName()));
+                        msg.setFaultBody(e);
+                    }
+                } catch (JMSException e) {
+                    throw new JMSBindingException(e);
                 }
+            } else {
+                msg.setBody(null);
             }
         }
 
         return msg;
-    }     
+    }    
 
     public Invoker getNext() {
         return next;

Modified: tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceProvider.java?rev=770283&r1=770282&r2=770283&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceProvider.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLReferenceProvider.java Thu Apr 30 15:26:38 2009
@@ -23,7 +23,6 @@
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants;
-import org.apache.tuscany.sca.binding.jms.wireformat.jmsbytes.WireFormatJMSBytes;
 import org.apache.tuscany.sca.binding.jms.wireformat.jmsbytesxml.WireFormatJMSBytesXML;
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
 import org.apache.tuscany.sca.binding.ws.WebServiceBindingFactory;

Modified: tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLServiceProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLServiceProvider.java?rev=770283&r1=770282&r2=770283&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLServiceProvider.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/wireformat/jmsbytesxml/runtime/WireFormatJMSBytesXMLServiceProvider.java Thu Apr 30 15:26:38 2009
@@ -23,6 +23,7 @@
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants;
+import org.apache.tuscany.sca.binding.jms.provider.JMSResourceFactory;
 import org.apache.tuscany.sca.binding.jms.wireformat.jmsbytes.WireFormatJMSBytes;
 import org.apache.tuscany.sca.binding.jms.wireformat.jmsbytesxml.WireFormatJMSBytesXML;
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
@@ -41,17 +42,20 @@
     private RuntimeComponent component;
     private RuntimeComponentService service;
     private JMSBinding binding;
+    private JMSResourceFactory jmsResourceFactory;
     private InterfaceContract interfaceContract; 
 
     public WireFormatJMSBytesXMLServiceProvider(ExtensionPointRegistry registry,
                                              RuntimeComponent component, 
                                              RuntimeComponentService service, 
-                                             Binding binding) {
+                                               Binding binding, 
+                                               JMSResourceFactory jmsResourceFactory) {
         super();
         this.registry = registry;
         this.component = component;
         this.service = service;
         this.binding = (JMSBinding)binding;
+        this.jmsResourceFactory = jmsResourceFactory;
         
         // configure the service based on this wire format
         
@@ -97,7 +101,7 @@
      */
     public Interceptor createInterceptor() {
         return new WireFormatJMSBytesXMLServiceInterceptor((JMSBinding)binding,
-                                                         null,
+                                                          jmsResourceFactory,
                                                         service.getRuntimeWire(binding));
     }