/* | |
* 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. | |
*/ | |
package org.apache.axiom.soap.impl.llom; | |
import org.apache.axiom.om.OMConstants; | |
import org.apache.axiom.om.OMElement; | |
import org.apache.axiom.om.OMException; | |
import org.apache.axiom.om.OMNamespace; | |
import org.apache.axiom.om.OMNode; | |
import org.apache.axiom.om.OMXMLParserWrapper; | |
import org.apache.axiom.soap.SOAP11Constants; | |
import org.apache.axiom.soap.SOAP12Constants; | |
import org.apache.axiom.soap.SOAPBody; | |
import org.apache.axiom.soap.SOAPConstants; | |
import org.apache.axiom.soap.SOAPEnvelope; | |
import org.apache.axiom.soap.SOAPFactory; | |
import org.apache.axiom.soap.SOAPFault; | |
import org.apache.axiom.soap.SOAPProcessingException; | |
/** | |
* Class SOAPBodyImpl | |
*/ | |
public abstract class SOAPBodyImpl extends SOAPElement | |
implements SOAPBody, OMConstants { | |
/** | |
* Field hasSOAPFault | |
*/ | |
private boolean hasSOAPFault = false; | |
protected SOAPBodyImpl(String localName, OMNamespace ns, | |
SOAPFactory factory) { | |
super(localName, ns, factory); | |
} | |
/** | |
* @param envelope | |
*/ | |
public SOAPBodyImpl(SOAPEnvelope envelope, SOAPFactory factory) | |
throws SOAPProcessingException { | |
super(envelope, SOAPConstants.BODY_LOCAL_NAME, true, factory); | |
} | |
/** | |
* Constructor SOAPBodyImpl | |
* | |
* @param envelope | |
* @param builder | |
*/ | |
public SOAPBodyImpl(SOAPEnvelope envelope, OMXMLParserWrapper builder, | |
SOAPFactory factory) { | |
super(envelope, SOAPConstants.BODY_LOCAL_NAME, builder, factory); | |
} | |
/** | |
* Creates a new <code>SOAPFault</code> object and adds it to | |
* this <code>SOAPBody</code> object. | |
* | |
* @param e | |
* @return the new <code>SOAPFault</code> object | |
* @throws org.apache.axiom.om.OMException | |
* if there is a SOAP error | |
* @throws OMException | |
*/ | |
public abstract SOAPFault addFault(Exception e) throws OMException; | |
/** | |
* Indicates whether a <code>SOAPFault</code> object exists in | |
* this <code>SOAPBody</code> object. | |
* | |
* @return <code>true</code> if a <code>SOAPFault</code> object exists in | |
* this <code>SOAPBody</code> object; <code>false</code> | |
* otherwise | |
*/ | |
public boolean hasFault() { | |
if (hasSOAPFault) { | |
return true; | |
} else { | |
OMElement element = getFirstElement(); | |
if (element != null | |
&& | |
SOAPConstants.SOAPFAULT_LOCAL_NAME.equals( | |
element.getLocalName()) | |
&& | |
(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals( | |
element.getNamespace().getName()) | |
|| | |
SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals( | |
element.getNamespace().getName()))) { //added this line | |
hasSOAPFault = true; | |
return true; | |
} else { | |
return false; | |
} | |
} | |
} | |
/** | |
* Returns the <code>SOAPFault</code> object in this <code>SOAPBody</code> | |
* object. | |
* | |
* @return the <code>SOAPFault</code> object in this <code>SOAPBody</code> | |
* object | |
*/ | |
public SOAPFault getFault() { | |
OMElement element = getFirstElement(); | |
if (hasSOAPFault) { | |
return (SOAPFault) element; | |
} else if (element != null | |
&& | |
SOAPConstants.SOAPFAULT_LOCAL_NAME.equals( | |
element.getLocalName()) | |
&& | |
(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals( | |
element.getNamespace().getName()) | |
|| | |
SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals( | |
element.getNamespace().getName()))) { //added this line | |
hasSOAPFault = true; | |
return (SOAPFault) element; | |
} else { | |
return null; | |
} | |
} | |
/** | |
* @param soapFault | |
* @throws org.apache.axiom.om.OMException | |
* | |
* @throws OMException | |
*/ | |
public void addFault(SOAPFault soapFault) throws OMException { | |
if (hasSOAPFault) { | |
throw new OMException( | |
"SOAP Body already has a SOAP Fault and there can not be more than one SOAP fault"); | |
} | |
addChild(soapFault); | |
hasSOAPFault = true; | |
} | |
protected void checkParent(OMElement parent) throws SOAPProcessingException { | |
if (!(parent instanceof SOAPEnvelopeImpl)) { | |
throw new SOAPProcessingException( | |
"Expecting an implementation of SOAP Envelope as the parent. But received some other implementation"); | |
} | |
} | |
public OMNode detach() throws OMException { | |
throw new SOAPProcessingException("Can not detach SOAP Body, SOAP Envelope must have a Body !!"); | |
} | |
} |