Author: antelder
Date: Wed Mar 31 12:22:14 2010
New Revision: 929499

URL: http://svn.apache.org/viewvc?rev=929499&view=rev
Log:
Start getting JAX-WS WS binding working with application exceptions

Modified:
    
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
    
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java?rev=929499&r1=929498&r2=929499&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSBindingInvoker.java
 Wed Mar 31 12:22:14 2010
@@ -44,10 +44,10 @@ import javax.xml.ws.soap.SOAPFaultExcept
 
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
 import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
-import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
 /**
@@ -120,7 +120,7 @@ public class JAXWSBindingInvoker impleme
             if (body != null) {
                 SOAPFault fault = body.getFault();
                 if (fault != null) {
-                    setFault(msg, fault);
+//                    setFault(msg, fault);
                 } else {
                     // The 1st child element
                     msg.setBody(body.getChildElements().next());
@@ -128,8 +128,7 @@ public class JAXWSBindingInvoker impleme
 
             }
         } catch (SOAPFaultException e) {
-            e.printStackTrace();
-            setFault(msg, e.getFault());
+            setFault(msg, e);
         } catch (WebServiceException e) {
             msg.setFaultBody(e);
         } catch (SOAPException e) {
@@ -141,14 +140,16 @@ public class JAXWSBindingInvoker impleme
         return msg;
     }
 
-    private void setFault(Message msg, SOAPFault fault) {
+    private void setFault(Message msg, SOAPFaultException e) {
+        SOAPFault fault = e.getFault();
         Detail detail = fault.getDetail();
-        if (detail == null) {
-            return;
-        }
-        for (Iterator i = detail.getDetailEntries(); i.hasNext();) {
-            DetailEntry entry = (DetailEntry)i.next();
-            msg.setFaultBody(entry);
+        if (detail != null) {
+           for (Iterator i = detail.getDetailEntries(); i.hasNext();) {
+               DetailEntry entry = (DetailEntry)i.next();
+               FaultException fe = new FaultException(e.getMessage(), 
entry.getFirstChild(), e);
+               fe.setFaultName(entry.getElementQName());
+               msg.setFaultBody(fe);
+           }
         }
     }
 

Modified: 
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java?rev=929499&r1=929498&r2=929499&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-ws-runtime-jaxws/src/main/java/org/apache/tuscany/sca/binding/ws/jaxws/JAXWSServiceBindingProvider.java
 Wed Mar 31 12:22:14 2010
@@ -18,8 +18,13 @@
  */
 package org.apache.tuscany.sca.binding.ws.jaxws;
 
+import javax.xml.namespace.QName;
+import javax.xml.soap.Detail;
+import javax.xml.soap.DetailEntry;
+import javax.xml.soap.SOAPElement;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPFactory;
+import javax.xml.soap.SOAPFault;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.Provider;
@@ -33,6 +38,7 @@ import org.apache.tuscany.sca.databindin
 import org.apache.tuscany.sca.host.http.ServletHost;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
 import org.apache.tuscany.sca.invocation.InvocationChain;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.invocation.MessageFactory;
@@ -57,10 +63,6 @@ public class JAXWSServiceBindingProvider
                                        FactoryExtensionPoint modelFactories,
                                        DataBindingExtensionPoint dataBindings) 
{
 
-        if (servletHost == null) {
-            throw new ServiceRuntimeException("No Servlet host is avaible for 
HTTP web services");
-        }
-
         this.messageFactory = modelFactories.getFactory(MessageFactory.class);
 
         this.soapMessageFactory = 
modelFactories.getFactory(javax.xml.soap.MessageFactory.class);
@@ -141,9 +143,18 @@ public class JAXWSServiceBindingProvider
             requestMsg.setBody(body);
             requestMsg.setOperation(operation);
             Message responseMsg = endpoint.invoke(operation, requestMsg);
-            Element element = responseMsg.getBody();
             SOAPMessage response = soapMessageFactory.createMessage();
-            
response.getSOAPBody().addChildElement(soapFactory.createElement(element));
+            if (responseMsg.isFault()) {
+                FaultException fe = responseMsg.getBody();
+                SOAPFault fault = response.getSOAPBody().addFault(new 
QName(response.getSOAPBody().getNamespaceURI(), "Server"), "unknown");
+                Detail d = fault.addDetail();
+                DetailEntry de = d.addDetailEntry(fe.getFaultName());
+                SOAPElement dece = de.addChildElement("message");
+                dece.addTextNode(fe.getMessage());
+            } else {
+                Element element = responseMsg.getBody();
+                
response.getSOAPBody().addChildElement(soapFactory.createElement(element));
+            }
             return response;
         } catch (SOAPException e) {
             throw new ServiceRuntimeException(e);


Reply via email to