| package org.apache.axis2.engine.util; |
| |
| import org.apache.axiom.om.OMAbstractFactory; |
| import org.apache.axiom.om.OMElement; |
| import org.apache.axiom.soap.*; |
| import org.apache.axis2.AxisFault; |
| import org.apache.axis2.context.MessageContext; |
| |
| import javax.xml.namespace.QName; |
| /* |
| * Copyright 2004,2005 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| public class FaultThrowingService { |
| |
| public static final String THROW_FAULT_AS_AXIS_FAULT = "ThrowFaultAsAxisFault"; |
| public static final String THROW_FAULT_WITH_MSG_CTXT = "ThrowFaultWithMsgCtxt"; |
| |
| private SOAPFaultCode soapFaultCode; |
| private SOAPFaultReason soapFaultReason; |
| private SOAPFaultDetail soapFaultDetail; |
| |
| public OMElement echoWithFault(OMElement echoOMElement) throws AxisFault { |
| String text = echoOMElement.getText(); |
| if (THROW_FAULT_AS_AXIS_FAULT.equalsIgnoreCase(text)) { |
| throw new AxisFault(new QName("http://test.org", "TestFault", "test"), "FaultReason", new Exception("This is a test Exception")); |
| } else if (THROW_FAULT_WITH_MSG_CTXT.equalsIgnoreCase(text)) { |
| MessageContext inMessageContext = MessageContext.getCurrentMessageContext(); |
| initFaultInformation(inMessageContext); |
| |
| inMessageContext.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME, soapFaultCode); |
| inMessageContext.setProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME, soapFaultReason); |
| inMessageContext.setProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME, soapFaultDetail); |
| throw new AxisFault("Fake exception occurred !!"); |
| } else { |
| return echoOMElement; |
| } |
| } |
| |
| private void initFaultInformation(MessageContext inMessageContext) { |
| SOAPFactory soapFactory; |
| if (inMessageContext.isSOAP11()) { |
| soapFactory = OMAbstractFactory.getSOAP11Factory(); |
| } else { |
| soapFactory = OMAbstractFactory.getSOAP12Factory(); |
| } |
| |
| soapFaultCode = soapFactory.createSOAPFaultCode(); |
| SOAPFaultValue soapFaultValue = soapFactory.createSOAPFaultValue(soapFaultCode); |
| soapFaultValue.setText(new QName("http://test.org", "TestFault", "test")); |
| |
| soapFaultReason = soapFactory.createSOAPFaultReason(); |
| SOAPFaultText soapFaultText = soapFactory.createSOAPFaultText(soapFaultReason); |
| soapFaultText.setText("This is some FaultReason"); |
| |
| soapFaultDetail = soapFactory.createSOAPFaultDetail(); |
| QName qName = new QName("http://someuri.org", "FaultException"); |
| OMElement detail = soapFactory.createOMElement(qName, soapFaultDetail); |
| qName = new QName("http://someuri.org", "ExceptionMessage"); |
| Throwable e = new Exception("This is a test Exception"); |
| while (e != null) { |
| OMElement exception = soapFactory.createOMElement(qName, null); |
| exception.setText(e.getMessage()); |
| detail.addChild(exception); |
| e = e.getCause(); |
| } |
| } |
| |
| |
| } |