All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axis.wsdl.symbolTable.FaultInfo Maven / Gradle / Ivy

The newest version!
/*
 * 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.wsdl.symbolTable;

import org.apache.axis.constants.Use;
import org.apache.axis.utils.Messages;

import javax.wsdl.Fault;
import javax.wsdl.Message;
import javax.wsdl.Part;
import javax.wsdl.extensions.soap.SOAPHeaderFault;
import javax.xml.namespace.QName;
import java.io.IOException;
import java.util.Map;

/**
 * Fault information object.  This should probably really be FaultEntry and
 * it should be a subclass of SymTabEntry, but faults aren't first-class
 * objects in WSDL, so I'm not sure what the FaultEntry should contain and
 * how it should be constructed, so for now leave it as a simple object.
 */
public class FaultInfo {

    /** Field message */
    private Message message;

    /** Field xmlType */
    private QName xmlType;

    /** Field use */
    private Use use;

    /** Field qName */
    private QName qName;

    /** Field name */
    private String name;

    /**
     * This constructor creates FaultInfo for a binding fault.
     * 

* If the part of the fault is a type, then the QName is * derived from the element name and the provided namespace * (this namespace SHOULD come from the binding). *

* If the part of the fault is an element, then the QName is * the QName of the element, and the given namespace is ignored. * * @param fault * @param use * @param namespace * @param symbolTable */ public FaultInfo(Fault fault, Use use, String namespace, SymbolTable symbolTable) { this.message = fault.getMessage(); this.xmlType = getFaultType(symbolTable, getFaultPart()); this.use = (use != null) ? use : Use.LITERAL; this.name = fault.getName(); Part part = getFaultPart(); if (part == null) { this.qName = null; } else if (part.getTypeName() != null) { this.qName = new QName(namespace, part.getName()); } else { this.qName = part.getElementName(); } } // ctor /** * This constructor creates FaultInfo for a soap:headerFault. * * @param fault * @param symbolTable * @throws IOException */ public FaultInfo(SOAPHeaderFault fault, SymbolTable symbolTable) throws IOException { MessageEntry mEntry = symbolTable.getMessageEntry(fault.getMessage()); if (mEntry == null) { throw new IOException( Messages.getMessage("noMsg", fault.getMessage().toString())); } this.message = mEntry.getMessage(); Part part = message.getPart(fault.getPart()); this.xmlType = getFaultType(symbolTable, part); this.use = Use.getUse(fault.getUse()); if (part == null) { this.qName = null; } else if (part.getTypeName() != null) { this.qName = new QName(fault.getNamespaceURI(), part.getName()); } else { this.qName = part.getElementName(); } this.name = qName.getLocalPart(); } // ctor /** * Constructor FaultInfo * * @param faultMessage * @param faultPart * @param faultUse * @param faultNamespaceURI * @param symbolTable * @throws IOException */ public FaultInfo( QName faultMessage, String faultPart, String faultUse, String faultNamespaceURI, SymbolTable symbolTable) throws IOException { MessageEntry mEntry = symbolTable.getMessageEntry(faultMessage); if (mEntry == null) { throw new IOException(Messages.getMessage("noMsg", faultMessage.toString())); } this.message = mEntry.getMessage(); Part part = message.getPart(faultPart); this.xmlType = getFaultType(symbolTable, part); this.use = Use.getUse(faultUse); if (part == null) { this.qName = null; } else if (part.getTypeName() != null) { this.qName = new QName(faultNamespaceURI, part.getName()); } else { this.qName = part.getElementName(); } this.name = qName.getLocalPart(); } // ctor /** * Method getMessage * * @return */ public Message getMessage() { return message; } // getMessage /** * Method getXMLType * * @return */ public QName getXMLType() { return xmlType; } // getXMLType /** * Method getUse * * @return */ public Use getUse() { return use; } // getUse /** * Return the QName of a fault. This method may return null if no parts * are in the fault message. *

* If the part of the fault is a type, then the QName is * derived from the element name and the provided namespace * (this namespace SHOULD come from the binding). *

* If the part of the fault is an element, then the QName is * the QName of the element, and the given namespace is ignored. * * @return */ public QName getQName() { return qName; } // getQName /** * Return the name of the fault. * This is the name= attribute from a portType fault * or the localname of a header fault. * * @return */ public String getName() { return name; } // getName /** * It is assumed at this point that the fault message has only * 0 or 1 parts. If 0, return null. If 1, return it. * * @return */ private Part getFaultPart() { // get the name of the part Map parts = message.getParts(); // If no parts, skip it if (parts.size() == 0) { return null; } else { return (Part) parts.values().iterator().next(); } } /** * Get the XML type (QName) for a Fault - look in the (single) fault * part for type="" or element="" - if type, return the QName. If * element, return the reference type for the element. * * @param part the Fault to dig into * @param st the SymbolTable we're using * @return the XML type of the Fault's part, or null */ private QName getFaultType(SymbolTable st, Part part) { if (part != null) { if (part.getTypeName() != null) { return part.getTypeName(); } // Literal, so get the element's type TypeEntry entry = st.getElement(part.getElementName()); if ((entry != null) && (entry.getRefType() != null)) { return entry.getRefType().getQName(); } } return null; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy