org.apache.axis.wsdl.symbolTable

Class SymbolTable

public class SymbolTable extends Object

This class represents a table of all of the top-level symbols from a set of WSDL Definitions and DOM Documents: XML types; WSDL messages, portTypes, bindings, and services.

This symbolTable contains entries of the form where key is of type QName and value is of type Vector. The Vector's elements are all of the objects that have the given QName. This is necessary since names aren't unique among the WSDL types. message, portType, binding, service, could all have the same QName and are differentiated merely by type. SymbolTable contains type-specific getters to bypass the Vector layer: public PortTypeEntry getPortTypeEntry(QName name), etc.

Field Summary
static StringANON_TOKEN
Field ANON_TOKEN
protected HashMapderivedTypes
protected Mapnode2ExtensionBase
cache of nodes -> base types for complexTypes.
protected booleanquiet
Field quiet
Constructor Summary
SymbolTable(BaseTypeMapping btm, boolean addImports, boolean verbose, boolean nowrap)
Construct a symbol table with the given Namespaces.
Method Summary
protected voidadd(String context, Definition def, Document doc)
Add the given Definition and Document information to the symbol table (including imported symbols), populating it with SymTabEntries for each of the top-level symbols.
protected voidcreateTypeFromRef(Node node)
Node may contain a reference (via type=, ref=, or element= attributes) to another type.
voiddump(PrintStream out)
Dump the contents of the symbol table.
protected voidensureOperationMessageValid(Message message)
ensures that a message in a <input>, <output>, or <fault> element in an <operation> element is valid.
protected voidensureOperationsOfPortTypeValid(PortType portType)
ensures that an an element <portType> is valid.
protected voidensureOperationValid(Operation operation)
ensures that an an element <operation> within an element <portType> is valid.
protected booleanexistsPortWithName(QName name)
checks whether there exists a WSDL port with a given name in the current symbol table
SymTabEntryget(QName qname, Class cls)
Get the entry with the given QName of the given class.
BindingEntrygetBindingEntry(QName qname)
Get the BindingEntry with the given QName.
DefinitiongetDefinition()
Get the Definition.
ElementgetElement(QName qname)
Get the Element TypeEntry with the given QName.
MapgetElementFormDefaults()
MapgetElementIndex()
Return an unmodifiable map of qnames -> Elements in the symbol table.
HashMapgetHashMap()
Get the raw symbol table HashMap.
ListgetMessageEntries()
MessageEntrygetMessageEntry(QName qname)
Get the MessageEntry with the given QName.
ParametersgetOperationParameters(Operation operation, String namespace, BindingEntry bindingEntry)
For the given operation, this method returns the parameter info conveniently collated.
voidgetParametersFromParts(Vector v, Collection parts, boolean literal, String opName, BindingEntry bindingEntry)
This method returns a vector containing Parameters which represent each Part (shouldn't we call these "Parts" or something?)
PortTypeEntrygetPortTypeEntry(QName qname)
Get the PortTypeEntry with the given QName.
ServiceEntrygetServiceEntry(QName qname)
Get the ServiceEntry with the given QName.
VectorgetSymbols(QName qname)
Get the list of entries with the given QName.
TypegetType(QName qname)
Get the Type TypeEntry with the given QName.
TypeEntrygetTypeEntry(QName qname, boolean wantElementType)
Get the type entry for the given qname.
intgetTypeEntryCount()
Return the count of TypeEntries in the symbol table.
MapgetTypeIndex()
Return an unmodifiable map of qnames -> Elements in the symbol table.
VectorgetTypes()
Get the list of all the XML schema types in the symbol table.
StringgetWSDLURI()
Get the WSDL URI.
booleanisKnownNamespace(String namespace)
Check if this is a known namespace (soap-enc or schema xsd or schema xsi or xml)
booleanisQuiet()
Method isQuiet
booleanisWrapped()
Are we wrapping literal soap body elements.
voidpopulate(String uri)
Call this method if you have a uri for the WSDL document
voidpopulate(String uri, String username, String password)
Method populate
voidpopulate(String context, Document doc)
Call this method if your WSDL document has already been parsed as an XML DOM document.
voidpopulateTypes(URL context, Document doc)
Populate the symbol table with all of the Types from the Document.
protected voidprocessTypes()
voidsetQuiet(boolean quiet)
Method setQuiet
voidsetWrapArrays(boolean wrapArrays)
voidsetWrapped(boolean wrapped)
Turn on/off element wrapping for literal soap body's.

Field Detail

ANON_TOKEN

public static final String ANON_TOKEN
Field ANON_TOKEN

derivedTypes

protected HashMap derivedTypes

node2ExtensionBase

protected final Map node2ExtensionBase
cache of nodes -> base types for complexTypes. The cache is built on nodes because multiple TypeEntry objects may use the same node.

quiet

protected boolean quiet
Field quiet

Constructor Detail

SymbolTable

public SymbolTable(BaseTypeMapping btm, boolean addImports, boolean verbose, boolean nowrap)
Construct a symbol table with the given Namespaces.

Parameters: btm addImports verbose nowrap

Method Detail

add

protected void add(String context, Definition def, Document doc)
Add the given Definition and Document information to the symbol table (including imported symbols), populating it with SymTabEntries for each of the top-level symbols. When the symbol table has been populated, iterate through it, setting the isReferenced flag appropriately for each entry.

Parameters: context def doc

Throws: IOException SAXException WSDLException ParserConfigurationException

createTypeFromRef

protected void createTypeFromRef(Node node)
Node may contain a reference (via type=, ref=, or element= attributes) to another type. Create a Type object representing this referenced type.

Parameters: node

Throws: IOException

dump

public void dump(PrintStream out)
Dump the contents of the symbol table. For debugging purposes only.

Parameters: out

ensureOperationMessageValid

protected void ensureOperationMessageValid(Message message)
ensures that a message in a <input>, <output>, or <fault> element in an <operation> element is valid. In particular, ensures that
  1. an attribute message is present (according to the XML Schema for WSDL 1.1 message is required

  2. the value of attribute message (a QName) refers to an already defined message

Note: this method should throw a javax.wsdl.WSDLException rather than a java.io.IOException

Parameters: message the message object

Throws: IOException thrown, if the message is not valid

ensureOperationsOfPortTypeValid

protected void ensureOperationsOfPortTypeValid(PortType portType)
ensures that an an element <portType> is valid. Throws an exception if the portType is not valid.

Note: this method should throw a javax.wsdl.WSDLException rather than a java.io.IOException

Parameters: portType the portType element

Throws: IOException thrown, if the element is not valid. IllegalArgumentException thrown, if operation is null

ensureOperationValid

protected void ensureOperationValid(Operation operation)
ensures that an an element <operation> within an element <portType> is valid. Throws an exception if the operation is not valid.

Note: this method should throw a javax.wsdl.WSDLException rather than a java.io.IOException

Parameters: operation the operation element

Throws: IOException thrown, if the element is not valid. IllegalArgumentException thrown, if operation is null

existsPortWithName

protected boolean existsPortWithName(QName name)
checks whether there exists a WSDL port with a given name in the current symbol table

Parameters: name the QName of the port. Note: only the local part of the qname is relevant, since port names are not qualified with a namespace. They are of type nmtoken in WSDL 1.1 and of type ncname in WSDL 1.2

Returns: true, if there is a port element with the specified name; false, otherwise

get

public SymTabEntry get(QName qname, Class cls)
Get the entry with the given QName of the given class. If it does not exist, return null.

Parameters: qname cls

Returns:

getBindingEntry

public BindingEntry getBindingEntry(QName qname)
Get the BindingEntry with the given QName. If it doesn't exist, return null.

Parameters: qname

Returns:

getDefinition

public Definition getDefinition()
Get the Definition. The definition is null until populate is called.

Returns:

getElement

public Element getElement(QName qname)
Get the Element TypeEntry with the given QName. If it doesn't exist, return null.

Parameters: qname

Returns:

getElementFormDefaults

public Map getElementFormDefaults()

getElementIndex

public Map getElementIndex()
Return an unmodifiable map of qnames -> Elements in the symbol table.

Returns: an unmodifiable Map value

getHashMap

public HashMap getHashMap()
Get the raw symbol table HashMap.

Returns:

getMessageEntries

public List getMessageEntries()

getMessageEntry

public MessageEntry getMessageEntry(QName qname)
Get the MessageEntry with the given QName. If it doesn't exist, return null.

Parameters: qname

Returns:

getOperationParameters

public Parameters getOperationParameters(Operation operation, String namespace, BindingEntry bindingEntry)
For the given operation, this method returns the parameter info conveniently collated. There is a bit of processing that is needed to write the interface, stub, and skeleton. Rather than do that processing 3 times, it is done once, here, and stored in the Parameters object.

Parameters: operation namespace bindingEntry

Returns:

Throws: IOException

getParametersFromParts

public void getParametersFromParts(Vector v, Collection parts, boolean literal, String opName, BindingEntry bindingEntry)
This method returns a vector containing Parameters which represent each Part (shouldn't we call these "Parts" or something?) This routine does the wrapped doc/lit processing. It is also used for generating Faults, and this really confuses things but we need to do the same processing for the fault messages. This whole method is waaaay too complex. It needs rewriting (for instance, we sometimes new up a Parameter, then ignore it in favor of another we new up.)

Parameters: v The output vector of parameters parts The parts of the message literal Are we in a literal operation (or fault)? opName The operation (or fault) name bindingEntry The binding for this operation - can be NULL if we are looking at a fault

Throws: IOException when encountering an error in the WSDL

getPortTypeEntry

public PortTypeEntry getPortTypeEntry(QName qname)
Get the PortTypeEntry with the given QName. If it doesn't exist, return null.

Parameters: qname

Returns:

getServiceEntry

public ServiceEntry getServiceEntry(QName qname)
Get the ServiceEntry with the given QName. If it doesn't exist, return null.

Parameters: qname

Returns:

getSymbols

public Vector getSymbols(QName qname)
Get the list of entries with the given QName. Since symbols can share QNames, this list is necessary. This list will not contain any more than one element of any given SymTabEntry.

Parameters: qname

Returns:

getType

public Type getType(QName qname)
Get the Type TypeEntry with the given QName. If it doesn't exist, return null.

Parameters: qname

Returns:

getTypeEntry

public TypeEntry getTypeEntry(QName qname, boolean wantElementType)
Get the type entry for the given qname.

Parameters: qname wantElementType boolean that indicates type or element (for type= or ref=)

Returns:

getTypeEntryCount

public int getTypeEntryCount()
Return the count of TypeEntries in the symbol table.

Returns: an int value

getTypeIndex

public Map getTypeIndex()
Return an unmodifiable map of qnames -> Elements in the symbol table.

Returns: an unmodifiable Map value

getTypes

public Vector getTypes()

Deprecated: use specialized get{Element,Type}Index() methods instead

Get the list of all the XML schema types in the symbol table. In other words, all entries that are instances of TypeEntry.

Returns:

getWSDLURI

public String getWSDLURI()
Get the WSDL URI. The WSDL URI is null until populate is called, and ONLY if a WSDL URI is provided.

Returns:

isKnownNamespace

public boolean isKnownNamespace(String namespace)
Check if this is a known namespace (soap-enc or schema xsd or schema xsi or xml)

Parameters: namespace

Returns: true if this is a know namespace.

isQuiet

public boolean isQuiet()
Method isQuiet

Returns:

isWrapped

public boolean isWrapped()
Are we wrapping literal soap body elements.

Returns:

populate

public void populate(String uri)
Call this method if you have a uri for the WSDL document

Parameters: uri wsdlURI the location of the WSDL file.

Throws: IOException WSDLException SAXException ParserConfigurationException

populate

public void populate(String uri, String username, String password)
Method populate

Parameters: uri username password

Throws: IOException WSDLException SAXException ParserConfigurationException

populate

public void populate(String context, Document doc)
Call this method if your WSDL document has already been parsed as an XML DOM document.

Parameters: context context This is directory context for the Document. If the Document were from file "/x/y/z.wsdl" then the context could be "/x/y" (even "/x/y/z.wsdl" would work). If context is null, then the context becomes the current directory. doc doc This is the XML Document containing the WSDL.

Throws: IOException SAXException WSDLException ParserConfigurationException

populateTypes

public void populateTypes(URL context, Document doc)
Populate the symbol table with all of the Types from the Document.

Parameters: context doc

Throws: IOException SAXException WSDLException ParserConfigurationException

processTypes

protected void processTypes()

setQuiet

public void setQuiet(boolean quiet)
Method setQuiet

Parameters: quiet

setWrapArrays

public void setWrapArrays(boolean wrapArrays)

setWrapped

public void setWrapped(boolean wrapped)
Turn on/off element wrapping for literal soap body's.

Parameters: wrapped

Copyright B) 2005 Apache Web Services Project. All Rights Reserved.