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);