001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2006 Danet GmbH (www.danet.de), BU BTS.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: FaultUtils.java,v 1.4.2.1 2007/11/02 16:00:33 drmlipp Exp $
021: *
022: * $Log: FaultUtils.java,v $
023: * Revision 1.4.2.1 2007/11/02 16:00:33 drmlipp
024: * Merged bug fixes from HEAD.
025: *
026: * Revision 1.5 2007/09/21 22:20:14 mlipp
027: * Workaround for JDK 1.6 SAAJ bug.
028: *
029: * Revision 1.4 2007/03/27 21:59:42 mlipp
030: * Fixed lots of checkstyle warnings.
031: *
032: * Revision 1.3 2007/01/31 22:55:36 mlipp
033: * Some more refactoring and fixes of problems introduced by refactoring.
034: *
035: * Revision 1.2 2007/01/30 11:56:14 drmlipp
036: * Merged Wf-XML branch.
037: *
038: * Revision 1.1.2.1 2006/12/13 11:23:48 schnelle
039: * Implemented instance ListActivities.
040: *
041: */
042: package de.danet.an.workflow.clients.wfxml;
043:
044: import javax.xml.soap.Detail;
045: import javax.xml.soap.DetailEntry;
046: import javax.xml.soap.Name;
047: import javax.xml.soap.SOAPBody;
048: import javax.xml.soap.SOAPBodyElement;
049: import javax.xml.soap.SOAPElement;
050: import javax.xml.soap.SOAPEnvelope;
051: import javax.xml.soap.SOAPException;
052: import javax.xml.soap.SOAPFault;
053: import javax.xml.soap.SOAPMessage;
054:
055: /**
056: * This class provides utility methods to fill the {@link SOAPFault} part
057: * of the response.
058: *
059: * @author Dirk Schnelle
060: *
061: */
062: class FaultUtils {
063: /**
064: * Sets the detail message of the given exception as the fault string
065: * of the SOAP message without specifying a {@link Detail} part.
066: * @param message the message, where to set the fault string.
067: * @param throwable the throwable
068: * @throws SOAPException
069: * error setting the fault string.
070: */
071: static void setFault(SOAPMessage message, Throwable throwable)
072: throws SOAPException {
073: SOAPEnvelope respEnv = message.getSOAPPart().getEnvelope();
074:
075: SOAPFault fault = respEnv.getBody().addFault();
076: fault.setFaultString(throwable.toString());
077: }
078:
079: /**
080: * Sets the detail message of the given exception as the fault string
081: * of the SOAP message.
082: * @param message the message, where to set the fault string.
083: * @param errorCode the ASAP error code
084: * @param errorMessage the error message
085: * @throws SOAPException
086: * error setting the fault string.
087: */
088: static void setFault(SOAPMessage message, int errorCode,
089: String errorMessage) throws SOAPException {
090: SOAPEnvelope se = message.getSOAPPart().getEnvelope();
091:
092: // Work around for Bug 6581434 in JDK 1.6:
093: // javax.xml.soap.Detail.addDetailEntry is broken
094: /*
095: SOAPFault fault = se.getBody().addFault();
096: fault.setFaultString(errorMessage);
097:
098: Detail detail = fault.addDetail();
099: detail.addNamespaceDeclaration(Consts.ASAP_PREFIX, Consts.ASAP_NS);
100:
101: Name codeName
102: = se.createName("ErrorCode", Consts.ASAP_PREFIX, null);
103: DetailEntry codeDetail = detail.addDetailEntry(codeName);
104: codeDetail.addTextNode(Integer.toString(errorCode));
105:
106: Name messageName
107: = se.createName("ErrorMessage", Consts.ASAP_PREFIX, null);
108: DetailEntry messageDetail = detail.addDetailEntry(messageName);
109: messageDetail.addTextNode(errorMessage);
110: */
111:
112: final String SOAP_ENV = "http://schemas.xmlsoap.org/soap/envelope/";
113: SOAPBody sb = se.getBody();
114: SOAPBodyElement fault = sb.addBodyElement(se.createName(
115: "Fault", "SOAP_ENV", SOAP_ENV));
116: fault.addChildElement("faultstring").addTextNode(errorMessage);
117: SOAPElement detail = fault.addChildElement("detail");
118: detail.addChildElement("ErrorCode", Consts.ASAP_PREFIX,
119: Consts.ASAP_NS)
120: .addTextNode(Integer.toString(errorCode));
121: detail.addChildElement("ErrorMessage", Consts.ASAP_PREFIX,
122: Consts.ASAP_NS).addTextNode(errorMessage);
123: }
124: }
|