X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fprocess%2FWebServiceSlcExecutionNotifier.java;fp=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fprocess%2FWebServiceSlcExecutionNotifier.java;h=2af13bda8c442a134653235ac081b404634d4c8b;hb=0b505bbb6ed9b6491dbd1f86f4ad53b4cc87a6f9;hp=619336e868924b66194f5dd0d961ffe88d62ec91;hpb=b09b4c63b0ed47d22c202e700003ad01d4c4e0c5;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java index 619336e86..2af13bda8 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java @@ -1,9 +1,21 @@ package org.argeo.slc.core.process; +import java.util.Iterator; import java.util.List; +import javax.xml.transform.Source; +import javax.xml.transform.dom.DOMSource; + import org.springframework.ws.client.core.WebServiceTemplate; +import org.springframework.ws.soap.SoapFaultDetail; +import org.springframework.ws.soap.SoapFaultDetailElement; import org.springframework.ws.soap.client.SoapFaultClientException; +import org.w3c.dom.Node; + +import com.ibm.wsdl.util.IOUtils; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.msg.process.SlcExecutionRequest; import org.argeo.slc.msg.process.SlcExecutionStepsRequest; @@ -11,28 +23,75 @@ import org.argeo.slc.msg.process.SlcExecutionStepsRequest; public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier { private WebServiceTemplate template; + private Log log = LogFactory.getLog(getClass()); + public void addSteps(SlcExecution slcExecution, List additionalSteps) { SlcExecutionStepsRequest req = new SlcExecutionStepsRequest(); req.setSlcExecutionUuid(slcExecution.getUuid()); req.setSteps(additionalSteps); - template.marshalSendAndReceive(req); + try { + template.marshalSendAndReceive(req); + if (log.isDebugEnabled()) + log.debug("Added steps to slc execution " + + slcExecution.getUuid()); + } catch (SoapFaultClientException e) { + manageSoapException(e); + } } public void newExecution(SlcExecution slcExecution) { SlcExecutionRequest req = new SlcExecutionRequest(); req.setSlcExecution(slcExecution); - template.marshalSendAndReceive(req); + try { + template.marshalSendAndReceive(req); + if (log.isDebugEnabled()) + log.debug("Notified creation of slc execution " + + slcExecution.getUuid()); + } catch (SoapFaultClientException e) { + manageSoapException(e); + } } public void updateExecution(SlcExecution slcExecution) { SlcExecutionRequest req = new SlcExecutionRequest(); req.setSlcExecution(slcExecution); - template.marshalSendAndReceive(req); + try { + template.marshalSendAndReceive(req); + if (log.isDebugEnabled()) + log.debug("Notify update of slc execution " + + slcExecution.getUuid()); + } catch (SoapFaultClientException e) { + manageSoapException(e); + } } public void setTemplate(WebServiceTemplate template) { this.template = template; } + protected void manageSoapException(SoapFaultClientException e) { + log + .error("WS root cause: " + + e.getSoapFault().getFaultStringOrReason()); + StringBuffer stack = new StringBuffer(""); + SoapFaultDetail detail = e.getSoapFault().getFaultDetail(); + if (detail != null) { + Iterator it = (Iterator) detail + .getDetailEntries(); + while (it.hasNext()) { + SoapFaultDetailElement elem = it.next(); + if (elem.getName().getLocalPart().equals("StackElement")) { + Source source = elem.getSource(); + if (source instanceof DOMSource) { + Node node = ((DOMSource) source).getNode(); + stack.append(node.getTextContent()).append('\n'); + } + } + } + + if (stack.length() > 0 && log.isTraceEnabled()) + log.error("WS root cause stack: " + stack); + } + } }