soapfaultimpl.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 809 行 · 第 1/3 页
JAVA
809 行
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.axis2.saaj;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.OMNamespaceImpl;
import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
import org.apache.axiom.om.impl.dom.ElementImpl;
import org.apache.axiom.om.impl.dom.NodeImpl;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPFaultCode;
import org.apache.axiom.soap.SOAPFaultDetail;
import org.apache.axiom.soap.SOAPFaultNode;
import org.apache.axiom.soap.SOAPFaultReason;
import org.apache.axiom.soap.SOAPFaultRole;
import org.apache.axiom.soap.SOAPFaultSubCode;
import org.apache.axiom.soap.SOAPFaultText;
import org.apache.axiom.soap.SOAPFaultValue;
import org.apache.axiom.soap.impl.dom.SOAPFaultValueImpl;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultDetailImpl;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultReasonImpl;
import org.apache.axiom.soap.impl.dom.soap11.SOAP11FaultRoleImpl;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12FaultDetailImpl;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12FaultRoleImpl;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12FaultTextImpl;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12FaultValueImpl;
import javax.xml.namespace.QName;
import javax.xml.soap.Detail;
import javax.xml.soap.Name;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPFaultElement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
public class SOAPFaultImpl extends SOAPBodyElementImpl implements SOAPFault {
protected org.apache.axiom.soap.SOAPFault fault;
private boolean isDetailAdded;
private Locale faultReasonLocale;
private boolean defaultsSet;
/** @param fault */
public SOAPFaultImpl(org.apache.axiom.soap.SOAPFault fault) {
super((ElementImpl)fault);
this.fault = fault;
}
void setDefaults() throws SOAPException {
if (this.element.getOMFactory() instanceof SOAP11Factory) {
setFaultCode(SOAP11Constants.QNAME_SENDER_FAULTCODE);
} else {
setFaultCode(SOAP12Constants.QNAME_SENDER_FAULTCODE);
}
setFaultString("Fault string, and possibly fault code, not set");
defaultsSet = true;
}
void removeDefaults() {
if (defaultsSet) {
SOAPFaultReason reason = this.fault.getReason();
if (reason != null) {
reason.detach();
}
defaultsSet = false;
}
}
/**
* Sets this <CODE>SOAPFault</CODE> object with the given fault code.
* <p/>
* Fault codes, which given information about the fault, are defined in the SOAP 1.1
* specification. This element is mandatory in SOAP 1.1. Because the fault code is required to
* be a QName it is preferable to use the setFaultCode(Name)form of this method.
*
* @param faultCode - a String giving the fault code to be set. It must be of the form
* "prefix:localName" where the prefix has been defined in a namespace
* declaration.
* @throws SOAPException - if there was an error in adding the faultCode to the underlying XML
* tree.
* @see setFaultCode(Name), getFaultCode(),SOAPElement.addNamespaceDeclaration(String, String)
*/
public void setFaultCode(String faultCode) throws SOAPException {
org.apache.axiom.soap.SOAPFactory soapFactory = null;
SOAPFaultCode soapFaultCode = null;
//It must be of the form "prefix:localName" where the prefix has been defined in a
//namespace declaration.
if (faultCode.indexOf(":") == -1) {
throw new SOAPException("faultCode must be of the form prefix:localName");
}
// else{
// String prefix,localName ="";
// prefix = faultCode.substring(0, faultCode.indexOf(":"));
// localName = faultCode.substring(faultCode.indexOf(":")+1);
// }
if (this.element.getOMFactory() instanceof SOAP11Factory) {
soapFactory = (SOAP11Factory)this.element.getOMFactory();
soapFaultCode = soapFactory.createSOAPFaultCode(fault);
soapFaultCode.setText(faultCode);
} else if (this.element.getOMFactory() instanceof SOAP12Factory) {
soapFactory = (SOAP12Factory)this.element.getOMFactory();
soapFaultCode = soapFactory.createSOAPFaultCode(fault);
SOAPFaultValue soapFaultValue = soapFactory.createSOAPFaultValue(soapFaultCode);
soapFaultCode.setValue(soapFaultValue);
soapFaultValue.setText(faultCode);
}
this.fault.setCode(soapFaultCode);
}
/**
* Gets the fault code for this <CODE>SOAPFault</CODE> object.
*
* @return a <CODE>String</CODE> with the fault code
* @see #setFaultCode(String) setFaultCode(java.lang.String)
*/
public String getFaultCode() {
if (fault != null && fault.getCode() != null) {
if (this.element.getOMFactory() instanceof SOAP11Factory) {
return fault.getCode().getText();
} else if (this.element.getOMFactory() instanceof SOAP12Factory) {
return fault.getCode().getValue().getText();
} else {
return null;
}
} else {
return null;
}
}
/**
* Sets this SOAPFault object with the given fault actor.The fault actor is the recipient in the
* message path who caused the fault to happen. If this SOAPFault supports SOAP 1.2 then this
* call is equivalent to setFaultRole(String)
*
* @param faultActor - a String identifying the actor that caused this SOAPFault object
* @throws SOAPException - if there was an error in adding the faultActor to the underlying XML
* tree.
*/
public void setFaultActor(String faultActor) throws SOAPException {
if (this.element.getOMFactory() instanceof SOAP11Factory) {
if (this.fault.getRole() == null) {
SOAP11FaultRoleImpl faultRoleImpl = new SOAP11FaultRoleImpl(
this.fault, (SOAPFactory)this.element.getOMFactory());
faultRoleImpl.setRoleValue(faultActor);
this.fault.setRole(faultRoleImpl);
} else {
SOAPFaultRole role = this.fault.getRole();
role.setRoleValue(faultActor);
}
} else if (this.element.getOMFactory() instanceof SOAP12Factory) {
if (this.fault.getRole() == null) {
SOAP12FaultRoleImpl faultRoleImpl = new SOAP12FaultRoleImpl(
this.fault, (SOAPFactory)this.element.getOMFactory());
faultRoleImpl.setRoleValue(faultActor);
this.fault.setRole(faultRoleImpl);
} else {
SOAPFaultRole role = this.fault.getRole();
role.setRoleValue(faultActor);
}
}
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPFault#getFaultActor()
*/
public String getFaultActor() {
if (this.fault.getRole() != null) {
return this.fault.getRole().getRoleValue();
}
return null;
}
/**
* Sets the fault string for this <CODE>SOAPFault</CODE> object to the given string.
*
* @param faultString a <CODE>String</CODE> giving an explanation of the fault
* @throws SOAPException if there was an error in adding the <CODE>faultString</CODE> to the
* underlying XML tree.
* @see #getFaultString() getFaultString()
*/
public void setFaultString(String faultString) throws SOAPException {
if (this.element.getOMFactory() instanceof SOAP11Factory) {
setFaultString(faultString, null);
} else if (this.element.getOMFactory() instanceof SOAP12Factory) {
setFaultString(faultString, Locale.getDefault());
}
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPFault#getFaultString()
*/
public String getFaultString() {
if (this.fault.getNamespace().getNamespaceURI().equals(
SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
return this.fault.getReason().getText();
} else {
if (this.fault.getReason() != null && this.fault.getReason().getFirstSOAPText() != null)
{
return this.fault.getReason().getFirstSOAPText().getText();
}
}
return null;
}
/* (non-Javadoc)
* @see javax.xml.soap.SOAPFault#getDetail()
*/
public Detail getDetail() {
return (Detail)toSAAJNode((org.w3c.dom.Node)fault.getDetail());
}
/**
* Sets this SOAPFault object with the given fault code.Fault codes, which give information
* about the fault, are defined in the SOAP 1.1 specification. A fault code is mandatory and
* must be of type QName. This method provides a convenient way to set a fault code. For
* example,
* <p/>
* SOAPEnvelope se = ...; // Create a qualified name in the SOAP namespace with a localName //
* of Client. Note that prefix parameter is optional and is null // here which causes the
* implementation to use an appropriate prefix. Name qname = se.createName(Client,
* null,SOAPConstants.URI_NS_SOAP_ENVELOPE); SOAPFault fault = ...; fault.setFaultCode(qname);
* <p/>
* It is preferable to use this method over setFaultCode(String).
*
* @param faultCodeQName - a Name object giving the fault code to be set. It must be namespace
* qualified.
* @throws SOAPException - if there was an error in adding the faultcode element to the
* underlying XML tree.
*/
public void setFaultCode(Name faultCodeName) throws SOAPException {
if (faultCodeName.getURI() == null || faultCodeName.getURI().trim().length() == 0) {
throw new SOAPException("faultCodeQName must be namespace qualified.");
}
QName faultCodeQName =
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?