Package org.apache.axis.wsdl.symbolTable
Class SymbolTable
java.lang.Object
org.apache.axis.wsdl.symbolTable.SymbolTable
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 <key, value> 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
Fields -
Constructor Summary
ConstructorsConstructorDescriptionSymbolTable
(BaseTypeMapping btm, boolean addImports, boolean verbose, boolean nowrap) Construct a symbol table with the given Namespaces. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
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 void
createTypeFromRef
(Node node) Node may contain a reference (via type=, ref=, or element= attributes) to another type.void
dump
(PrintStream out) Dump the contents of the symbol table.protected void
ensureOperationMessageValid
(javax.wsdl.Message message) ensures that a message in a<input>
,<output>
, or<fault> element in an
<operation>
element is valid.protected void
ensureOperationsOfPortTypeValid
(javax.wsdl.PortType portType) ensures that an an element<portType>
is valid.protected void
ensureOperationValid
(javax.wsdl.Operation operation) ensures that an an element<operation>
within an element<portType>
is valid.
protected boolean
existsPortWithName
(QName name) checks whether there exists a WSDL port with a given name in the current symbol tableGet the entry with the given QName of the given class.getBindingEntry
(QName qname) Get the BindingEntry with the given QName.javax.wsdl.Definition
Get the Definition.getElement
(QName qname) Get the Element TypeEntry with the given QName.Return an unmodifiable map of qnames -> Elements in the symbol table.Get the raw symbol table HashMap.getMessageEntry
(QName qname) Get the MessageEntry with the given QName.getOperationParameters
(javax.wsdl.Operation operation, String namespace, BindingEntry bindingEntry) For the given operation, this method returns the parameter info conveniently collated.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.getPortTypeEntry
(QName qname) Get the PortTypeEntry with the given QName.getServiceEntry
(QName qname) Get the ServiceEntry with the given QName.getSymbols
(QName qname) Get the list of entries with the given QName.Get the Type TypeEntry with the given QName.getTypeEntry
(QName qname, boolean wantElementType) Get the type entry for the given qname.int
Return the count of TypeEntries in the symbol table.Return an unmodifiable map of qnames -> Elements in the symbol table.getTypes()
Deprecated.use specialized get{Element,Type}Index() methods insteadGet the WSDL URI.boolean
isKnownNamespace
(String namespace) Check if this is a known namespace (soap-enc or schema xsd or schema xsi or xml)boolean
isQuiet()
Method isQuietboolean
Are we wrapping literal soap body elements.void
Call this method if you have a uri for the WSDL documentvoid
Method populatevoid
Call this method if your WSDL document has already been parsed as an XML DOM document.void
populateTypes
(URL context, Document doc) Populate the symbol table with all of the Types from the Document.protected void
void
setQuiet
(boolean quiet) Method setQuietvoid
setWrapArrays
(boolean wrapArrays) void
setWrapped
(boolean wrapped) Turn on/off element wrapping for literal soap body's.
-
Field Details
-
derivedTypes
-
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 quietField quiet -
ANON_TOKEN
Field ANON_TOKEN- See Also:
-
-
Constructor Details
-
SymbolTable
Construct a symbol table with the given Namespaces.- Parameters:
btm
-addImports
-verbose
-nowrap
-
-
-
Method Details
-
isQuiet
public boolean isQuiet()Method isQuiet- Returns:
-
setQuiet
public void setQuiet(boolean quiet) Method setQuiet- Parameters:
quiet
-
-
getHashMap
Get the raw symbol table HashMap.- Returns:
-
getSymbols
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:
-
get
Get the entry with the given QName of the given class. If it does not exist, return null.- Parameters:
qname
-cls
-- Returns:
-
getTypeEntry
Get the type entry for the given qname.- Parameters:
qname
-wantElementType
- boolean that indicates type or element (for type= or ref=)- Returns:
-
getType
Get the Type TypeEntry with the given QName. If it doesn't exist, return null.- Parameters:
qname
-- Returns:
-
getElement
Get the Element TypeEntry with the given QName. If it doesn't exist, return null.- Parameters:
qname
-- Returns:
-
getMessageEntry
Get the MessageEntry with the given QName. If it doesn't exist, return null.- Parameters:
qname
-- Returns:
-
getPortTypeEntry
Get the PortTypeEntry with the given QName. If it doesn't exist, return null.- Parameters:
qname
-- Returns:
-
getBindingEntry
Get the BindingEntry with the given QName. If it doesn't exist, return null.- Parameters:
qname
-- Returns:
-
getServiceEntry
Get the ServiceEntry with the given QName. If it doesn't exist, return null.- Parameters:
qname
-- Returns:
-
getTypes
Deprecated.use specialized get{Element,Type}Index() methods insteadGet the list of all the XML schema types in the symbol table. In other words, all entries that are instances of TypeEntry.- Returns:
-
getElementIndex
Return an unmodifiable map of qnames -> Elements in the symbol table.- Returns:
- an unmodifiable
Map
value
-
getTypeIndex
Return an unmodifiable map of qnames -> Elements in the symbol table.- Returns:
- an unmodifiable
Map
value
-
getTypeEntryCount
public int getTypeEntryCount()Return the count of TypeEntries in the symbol table.- Returns:
- an
int
value
-
getDefinition
public javax.wsdl.Definition getDefinition()Get the Definition. The definition is null until populate is called.- Returns:
-
getWSDLURI
Get the WSDL URI. The WSDL URI is null until populate is called, and ONLY if a WSDL URI is provided.- Returns:
-
isWrapped
public boolean isWrapped()Are we wrapping literal soap body elements.- Returns:
-
setWrapped
public void setWrapped(boolean wrapped) Turn on/off element wrapping for literal soap body's.- Parameters:
wrapped
-
-
dump
Dump the contents of the symbol table. For debugging purposes only.- Parameters:
out
-
-
populate
public void populate(String uri) throws IOException, javax.wsdl.WSDLException, SAXException, ParserConfigurationException Call this method if you have a uri for the WSDL document- Parameters:
uri
- wsdlURI the location of the WSDL file.- Throws:
IOException
javax.wsdl.WSDLException
SAXException
ParserConfigurationException
-
populate
public void populate(String uri, String username, String password) throws IOException, javax.wsdl.WSDLException, SAXException, ParserConfigurationException Method populate- Parameters:
uri
-username
-password
-- Throws:
IOException
javax.wsdl.WSDLException
SAXException
ParserConfigurationException
-
populate
public void populate(String context, Document doc) throws IOException, SAXException, javax.wsdl.WSDLException, ParserConfigurationException 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
javax.wsdl.WSDLException
ParserConfigurationException
-
add
protected void add(String context, javax.wsdl.Definition def, Document doc) throws IOException, SAXException, javax.wsdl.WSDLException, ParserConfigurationException 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
javax.wsdl.WSDLException
ParserConfigurationException
-
isKnownNamespace
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.
-
populateTypes
public void populateTypes(URL context, Document doc) throws IOException, SAXException, javax.wsdl.WSDLException, ParserConfigurationException Populate the symbol table with all of the Types from the Document.- Parameters:
context
-doc
-- Throws:
IOException
SAXException
javax.wsdl.WSDLException
ParserConfigurationException
-
createTypeFromRef
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
-
ensureOperationMessageValid
ensures that a message in a<input>
,<output>
, or<fault> element in an
<operation>
element is valid. In particular, ensures that- an attribute
message
is present (according to the XML Schema for WSDL 1.1message
is required - the value of attribute
message
(a QName) refers to an already defined message
javax.wsdl.WSDLException
rather than ajava.io.IOException
- Parameters:
message
- the message object- Throws:
IOException
- thrown, if the message is not valid
- an attribute
-
ensureOperationValid
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 ajava.io.IOException
- Parameters:
operation
- the operation element- Throws:
IOException
- thrown, if the element is not valid.IllegalArgumentException
- thrown, if operation is null
-
ensureOperationsOfPortTypeValid
ensures that an an element<portType>
is valid. Throws an exception if the portType is not valid. Note: this method should throw ajavax.wsdl.WSDLException
rather than ajava.io.IOException
- Parameters:
portType
- the portType element- Throws:
IOException
- thrown, if the element is not valid.IllegalArgumentException
- thrown, if operation is null
-
getOperationParameters
public Parameters getOperationParameters(javax.wsdl.Operation operation, String namespace, BindingEntry bindingEntry) throws IOException 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) throws IOException 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 parametersparts
- The parts of the messageliteral
- Are we in a literal operation (or fault)?opName
- The operation (or fault) namebindingEntry
- The binding for this operation - can be NULL if we are looking at a fault- Throws:
IOException
- when encountering an error in the WSDL
-
existsPortWithName
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
-
processTypes
protected void processTypes() -
getMessageEntries
-
setWrapArrays
public void setWrapArrays(boolean wrapArrays) -
getElementFormDefaults
-