📄 soapfault.java
字号:
/* * Copyright 2001-2004 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.axis.message;import org.apache.axis.AxisFault;import org.apache.axis.Constants;import org.apache.axis.description.FaultDesc;import org.apache.axis.description.OperationDesc;import org.apache.axis.encoding.DeserializationContext;import org.apache.axis.encoding.SerializationContext;import org.apache.axis.soap.SOAPConstants;import org.apache.axis.utils.Messages;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.xml.sax.Attributes;import org.xml.sax.helpers.AttributesImpl;import javax.xml.namespace.QName;import javax.xml.soap.DetailEntry;import javax.xml.soap.Name;import javax.xml.soap.SOAPElement;import javax.xml.soap.SOAPException;import java.util.List;import java.util.Locale;import java.util.Iterator;/** A Fault body element. * * @author Sam Ruby (rubys@us.ibm.com) * @author Glen Daniels (gdaniels@apache.org) * @author Tom Jordahl (tomj@macromedia.com) */public class SOAPFault extends SOAPBodyElement implements javax.xml.soap.SOAPFault{ protected AxisFault fault; protected String prefix; private java.util.Locale locale; protected Detail detail = null; public SOAPFault(String namespace, String localName, String prefix, Attributes attrs, DeserializationContext context) throws AxisFault { super(namespace, localName, prefix, attrs, context); } public SOAPFault(AxisFault fault) { this.fault = fault; } public void outputImpl(SerializationContext context) throws Exception { SOAPConstants soapConstants = context.getMessageContext() == null ? SOAPConstants.SOAP11_CONSTANTS : context.getMessageContext().getSOAPConstants(); namespaceURI = soapConstants.getEnvelopeURI(); name = Constants.ELEM_FAULT; context.registerPrefixForURI(prefix, soapConstants.getEnvelopeURI()); context.startElement(new QName(this.getNamespaceURI(), this.getName()), attributes); // XXX - Can fault be anything but an AxisFault here? if (fault instanceof AxisFault) { AxisFault axisFault = fault; if (axisFault.getFaultCode() != null) { // Do this BEFORE starting the element, so the prefix gets // registered if needed. if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) { String faultCode = context.qName2String(axisFault.getFaultCode()); context.startElement(Constants.QNAME_FAULTCODE_SOAP12, null); context.startElement(Constants.QNAME_FAULTVALUE_SOAP12, null); context.writeSafeString(faultCode); context.endElement(); QName[] subcodes = axisFault.getFaultSubCodes(); if (subcodes != null) { for (int i = 0; i < subcodes.length; i++) { faultCode = context.qName2String(subcodes[i]); context.startElement(Constants.QNAME_FAULTSUBCODE_SOAP12, null); context.startElement(Constants.QNAME_FAULTVALUE_SOAP12, null); context.writeSafeString(faultCode); context.endElement(); } for (int i = 0; i < subcodes.length; i++) context.endElement(); } context.endElement(); } else { String faultCode = context.qName2String(axisFault.getFaultCode()); context.startElement(Constants.QNAME_FAULTCODE, null); context.writeSafeString(faultCode); context.endElement(); } } if (axisFault.getFaultString() != null) { if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) { context.startElement(Constants.QNAME_FAULTREASON_SOAP12, null); AttributesImpl attrs = new AttributesImpl(); attrs.addAttribute("http://www.w3.org/XML/1998/namespace", "lang", "xml:lang", "CDATA", "en"); context.startElement(Constants.QNAME_TEXT_SOAP12, attrs); } else context.startElement(Constants.QNAME_FAULTSTRING, null); context.writeSafeString(axisFault.getFaultString()); context.endElement(); if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) { context.endElement(); } } if (axisFault.getFaultActor() != null) { if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) context.startElement(Constants.QNAME_FAULTROLE_SOAP12, null); else context.startElement(Constants.QNAME_FAULTACTOR, null); context.writeSafeString(axisFault.getFaultActor()); context.endElement(); } if (axisFault.getFaultNode() != null) { if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) { context.startElement(Constants.QNAME_FAULTNODE_SOAP12, null); context.writeSafeString(axisFault.getFaultNode()); context.endElement(); } } // get the QName for this faults detail element QName qname = getFaultQName(fault.getClass(), context); if (qname == null && fault.detail != null) { qname = getFaultQName(fault.detail.getClass(), context); } if (qname == null) { // not the greatest, but... qname = new QName("", "faultData"); } Element[] faultDetails = axisFault.getFaultDetails(); if (faultDetails != null) { if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) context.startElement(Constants.QNAME_FAULTDETAIL_SOAP12, null); else context.startElement(Constants.QNAME_FAULTDETAILS, null); // Allow the fault to write its data, if any axisFault.writeDetails(qname, context); // Then output any other elements for (int i = 0; i < faultDetails.length; i++) { context.writeDOMElement(faultDetails[i]); } if (detail!= null) { for (Iterator it = detail.getChildren().iterator(); it.hasNext();) { ((NodeImpl)it.next()).output(context); } } context.endElement(); } } context.endElement(); } private QName getFaultQName(Class cls, SerializationContext context) { QName qname = null; if (! cls.equals(AxisFault.class)) { FaultDesc faultDesc = null; if (context.getMessageContext() != null) { OperationDesc op = context.getMessageContext().getOperation(); if (op != null) { faultDesc = op.getFaultByClass(cls); } } if (faultDesc != null) { qname = faultDesc.getQName(); } } return qname; } public AxisFault getFault() { return fault; } public void setFault(AxisFault fault) { this.fault = fault; } /** * Sets this <CODE>SOAPFaultException</CODE> object with the given * fault code.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -