<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.4.2_08) on Sat Apr 22 18:56:49 PDT 2006 -->
<TITLE>
URI (Axis API)
</TITLE>

<META NAME="keywords" CONTENT="org.apache.axis.types.URI class">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="URI (Axis API)";
}
</SCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/URI.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../org/apache/axis/types/UnsignedShort.html" title="class in org.apache.axis.types"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../org/apache/axis/types/Year.html" title="class in org.apache.axis.types"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="URI.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>

</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
org.apache.axis.types</FONT>
<BR>
Class URI</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by"><B>org.apache.axis.types.URI</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
</DL>
<HR>
<DL>
<DT>public class <B>URI</B><DT>extends java.lang.Object<DT>implements java.io.Serializable</DL>

<P>
<i>Axis Note: This class was 'borrowed' from Xerces 2:
 org.apache.xerces.util.URI.java, version 1.22 </i>
 <p>
 A class to represent a Uniform Resource Identifier (URI). This class
 is designed to handle the parsing of URIs and provide access to
 the various components (scheme, host, port, userinfo, path, query
 string and fragment) that may constitute a URI.
 <p>
 Parsing of a URI specification is done according to the URI
 syntax described in 
 <a href="http://www.ietf.org/rfc/rfc2396.txt?number=2396">RFC 2396</a>,
 and amended by
 <a href="http://www.ietf.org/rfc/rfc2732.txt?number=2732">RFC 2732</a>. 
 <p>
 Every absolute URI consists of a scheme, followed by a colon (':'), 
 followed by a scheme-specific part. For URIs that follow the 
 "generic URI" syntax, the scheme-specific part begins with two 
 slashes ("//") and may be followed by an authority segment (comprised 
 of user information, host, and port), path segment, query segment 
 and fragment. Note that RFC 2396 no longer specifies the use of the 
 parameters segment and excludes the "user:password" syntax as part of 
 the authority segment. If "user:password" appears in a URI, the entire 
 user/password string is stored as userinfo.
 <p>
 For URIs that do not follow the "generic URI" syntax (e.g. mailto),
 the entire scheme-specific part is treated as the "path" portion
 of the URI.
 <p>
 Note that, unlike the java.net.URL class, this class does not provide
 any built-in network access functionality nor does it provide any
 scheme-specific functionality (for example, it does not know a
 default port for a specific scheme). Rather, it only knows the
 grammar and basic set of operations that can be applied to a URI.
<P>

<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#org.apache.axis.types.URI">Serialized Form</A></DL>
<HR>

<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->

<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Nested Class Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MalformedURIExceptions are thrown in the process of building a URI
 or setting fields on a URI when an operation would result in an
 invalid URI specification.</TD>
</TR>
</TABLE>
&nbsp;
<!-- =========== FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI()">URI</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new and uninitialized URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(java.lang.String)">URI</A></B>(java.lang.String&nbsp;p_uriSpec)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI from a URI specification string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(java.lang.String, boolean)">URI</A></B>(java.lang.String&nbsp;p_uriSpec,
    boolean&nbsp;allowNonAbsoluteURI)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI from a URI specification string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(java.lang.String, java.lang.String)">URI</A></B>(java.lang.String&nbsp;p_scheme,
    java.lang.String&nbsp;p_schemeSpecificPart)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI that does not follow the generic URI syntax.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)">URI</A></B>(java.lang.String&nbsp;p_scheme,
    java.lang.String&nbsp;p_userinfo,
    java.lang.String&nbsp;p_host,
    int&nbsp;p_port,
    java.lang.String&nbsp;p_path,
    java.lang.String&nbsp;p_queryString,
    java.lang.String&nbsp;p_fragment)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI that follows the generic URI syntax from its
 component parts.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)">URI</A></B>(java.lang.String&nbsp;p_scheme,
    java.lang.String&nbsp;p_host,
    java.lang.String&nbsp;p_path,
    java.lang.String&nbsp;p_queryString,
    java.lang.String&nbsp;p_fragment)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI that follows the generic URI syntax from its
 component parts.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(org.apache.axis.types.URI)">URI</A></B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_other)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI from another URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(org.apache.axis.types.URI, java.lang.String)">URI</A></B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_base,
    java.lang.String&nbsp;p_uriSpec)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI from a base URI and a URI specification string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#URI(org.apache.axis.types.URI, java.lang.String, boolean)">URI</A></B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_base,
    java.lang.String&nbsp;p_uriSpec,
    boolean&nbsp;allowNonAbsoluteURI)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a new URI from a base URI and a URI specification string.</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#absolutize(org.apache.axis.types.URI)">absolutize</A></B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_base)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Absolutize URI with given base URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#appendPath(java.lang.String)">appendPath</A></B>(java.lang.String&nbsp;p_addToPath)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Append to the end of the path of this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#equals(java.lang.Object)">equals</A></B>(java.lang.Object&nbsp;p_test)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines if the passed-in Object is equivalent to this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getFragment()">getFragment</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the fragment for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getHost()">getHost</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the host for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getPath()">getPath</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the path for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getPath(boolean, boolean)">getPath</A></B>(boolean&nbsp;p_includeQueryString,
        boolean&nbsp;p_includeFragment)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the path for this URI (optionally with the query string and
 fragment).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getPort()">getPort</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the port for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getQueryString()">getQueryString</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the query string for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getRegBasedAuthority()">getRegBasedAuthority</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the registry based authority for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getScheme()">getScheme</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the scheme for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getSchemeSpecificPart()">getSchemeSpecificPart</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the scheme-specific part for this URI (everything following the
 scheme and the first colon).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#getUserinfo()">getUserinfo</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the userinfo for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#hashCode()">hashCode</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash-code value for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#isAbsoluteURI()">isAbsoluteURI</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether this URI represents an absolute URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#isConformantSchemeName(java.lang.String)">isConformantSchemeName</A></B>(java.lang.String&nbsp;p_scheme)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determine whether a scheme conforms to the rules for a scheme name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#isGenericURI()">isGenericURI</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the indicator as to whether this URI uses the "generic URI"
 syntax.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#isWellFormedAddress(java.lang.String)">isWellFormedAddress</A></B>(java.lang.String&nbsp;address)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determine whether a string is syntactically capable of representing
 a valid IPv4 address, IPv6 reference or the domain name of a network host.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#isWellFormedIPv4Address(java.lang.String)">isWellFormedIPv4Address</A></B>(java.lang.String&nbsp;address)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a string is an IPv4 address as defined by 
 RFC 2373, and under the further constraint that it must be a 32-bit
 address.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#isWellFormedIPv6Reference(java.lang.String)">isWellFormedIPv6Reference</A></B>(java.lang.String&nbsp;address)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a string is an IPv6 reference as defined
 by RFC 2732, where IPv6address is defined in RFC 2373.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setFragment(java.lang.String)">setFragment</A></B>(java.lang.String&nbsp;p_fragment)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the fragment for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setHost(java.lang.String)">setHost</A></B>(java.lang.String&nbsp;p_host)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the host for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setPath(java.lang.String)">setPath</A></B>(java.lang.String&nbsp;p_path)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the path for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setPort(int)">setPort</A></B>(int&nbsp;p_port)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the port for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setQueryString(java.lang.String)">setQueryString</A></B>(java.lang.String&nbsp;p_queryString)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the query string for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setRegBasedAuthority(java.lang.String)">setRegBasedAuthority</A></B>(java.lang.String&nbsp;authority)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the registry based authority for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setScheme(java.lang.String)">setScheme</A></B>(java.lang.String&nbsp;p_scheme)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the scheme for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#setUserinfo(java.lang.String)">setUserinfo</A></B>(java.lang.String&nbsp;p_userinfo)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the userinfo for this URI.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/axis/types/URI.html#toString()">toString</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the URI as a string specification.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class java.lang.Object</B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, finalize, getClass, notify, notifyAll, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->


<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TD>
</TR>
</TABLE>

<A NAME="URI()"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>()</PRE>
<DL>
<DD>Construct a new and uninitialized URI.
<P>
</DL>
<HR>

<A NAME="URI(org.apache.axis.types.URI)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_other)</PRE>
<DL>
<DD>Construct a new URI from another URI. All fields for this URI are
 set equal to the fields of the URI passed in.
<P>
<DT><B>Parameters:</B><DD><CODE>p_other</CODE> - the URI to copy (cannot be null)</DL>
<HR>

<A NAME="URI(java.lang.String)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(java.lang.String&nbsp;p_uriSpec)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI from a URI specification string. If the
 specification follows the "generic URI" syntax, (two slashes
 following the first colon), the specification will be parsed
 accordingly - setting the scheme, userinfo, host,port, path, query
 string and fragment fields as necessary. If the specification does
 not follow the "generic URI" syntax, the specification is parsed
 into a scheme and scheme-specific part (stored as the path) only.
<P>
<DT><B>Parameters:</B><DD><CODE>p_uriSpec</CODE> - the URI specification string (cannot be null or
                  empty)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_uriSpec violates any syntax
                                   rules</DL>
<HR>

<A NAME="URI(java.lang.String, boolean)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(java.lang.String&nbsp;p_uriSpec,
           boolean&nbsp;allowNonAbsoluteURI)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI from a URI specification string. If the
 specification follows the "generic URI" syntax, (two slashes
 following the first colon), the specification will be parsed
 accordingly - setting the scheme, userinfo, host,port, path, query
 string and fragment fields as necessary. If the specification does
 not follow the "generic URI" syntax, the specification is parsed
 into a scheme and scheme-specific part (stored as the path) only.
 Construct a relative URI if boolean is assigned to "true"
 and p_uriSpec is not valid absolute URI, instead of throwing an exception.
<P>
<DT><B>Parameters:</B><DD><CODE>p_uriSpec</CODE> - the URI specification string (cannot be null or
                  empty)<DD><CODE>allowNonAbsoluteURI</CODE> - true to permit non-absolute URIs, 
                            false otherwise.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_uriSpec violates any syntax
                                   rules</DL>
<HR>

<A NAME="URI(org.apache.axis.types.URI, java.lang.String)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_base,
           java.lang.String&nbsp;p_uriSpec)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI from a base URI and a URI specification string.
 The URI specification string may be a relative URI.
<P>
<DT><B>Parameters:</B><DD><CODE>p_base</CODE> - the base URI (cannot be null if p_uriSpec is null or
               empty)<DD><CODE>p_uriSpec</CODE> - the URI specification string (cannot be null or
                  empty if p_base is null)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_uriSpec violates any syntax
                                  rules</DL>
<HR>

<A NAME="URI(org.apache.axis.types.URI, java.lang.String, boolean)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_base,
           java.lang.String&nbsp;p_uriSpec,
           boolean&nbsp;allowNonAbsoluteURI)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI from a base URI and a URI specification string.
 The URI specification string may be a relative URI.
 Construct a relative URI if boolean is assigned to "true"
 and p_uriSpec is not valid absolute URI and p_base is null
 instead of throwing an exception.
<P>
<DT><B>Parameters:</B><DD><CODE>p_base</CODE> - the base URI (cannot be null if p_uriSpec is null or
               empty)<DD><CODE>p_uriSpec</CODE> - the URI specification string (cannot be null or
                  empty if p_base is null)<DD><CODE>allowNonAbsoluteURI</CODE> - true to permit non-absolute URIs, 
                            false otherwise.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_uriSpec violates any syntax
                                  rules</DL>
<HR>

<A NAME="URI(java.lang.String, java.lang.String)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(java.lang.String&nbsp;p_scheme,
           java.lang.String&nbsp;p_schemeSpecificPart)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI that does not follow the generic URI syntax.
 Only the scheme and scheme-specific part (stored as the path) are
 initialized.
<P>
<DT><B>Parameters:</B><DD><CODE>p_scheme</CODE> - the URI scheme (cannot be null or empty)<DD><CODE>p_schemeSpecificPart</CODE> - the scheme-specific part (cannot be
                             null or empty)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_scheme violates any
                                  syntax rules</DL>
<HR>

<A NAME="URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(java.lang.String&nbsp;p_scheme,
           java.lang.String&nbsp;p_host,
           java.lang.String&nbsp;p_path,
           java.lang.String&nbsp;p_queryString,
           java.lang.String&nbsp;p_fragment)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI that follows the generic URI syntax from its
 component parts. Each component is validated for syntax and some
 basic semantic checks are performed as well.  See the individual
 setter methods for specifics.
<P>
<DT><B>Parameters:</B><DD><CODE>p_scheme</CODE> - the URI scheme (cannot be null or empty)<DD><CODE>p_host</CODE> - the hostname, IPv4 address or IPv6 reference for the URI<DD><CODE>p_path</CODE> - the URI path - if the path contains '?' or '#',
               then the query string and/or fragment will be
               set from the path; however, if the query and
               fragment are specified both in the path and as
               separate parameters, an exception is thrown<DD><CODE>p_queryString</CODE> - the URI query string (cannot be specified
                      if path is null)<DD><CODE>p_fragment</CODE> - the URI fragment (cannot be specified if path
                   is null)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if any of the parameters violates
                                  syntax rules or semantic rules</DL>
<HR>

<A NAME="URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>
URI</H3>
<PRE>
public <B>URI</B>(java.lang.String&nbsp;p_scheme,
           java.lang.String&nbsp;p_userinfo,
           java.lang.String&nbsp;p_host,
           int&nbsp;p_port,
           java.lang.String&nbsp;p_path,
           java.lang.String&nbsp;p_queryString,
           java.lang.String&nbsp;p_fragment)
    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Construct a new URI that follows the generic URI syntax from its
 component parts. Each component is validated for syntax and some
 basic semantic checks are performed as well.  See the individual
 setter methods for specifics.
<P>
<DT><B>Parameters:</B><DD><CODE>p_scheme</CODE> - the URI scheme (cannot be null or empty)<DD><CODE>p_userinfo</CODE> - the URI userinfo (cannot be specified if host
                   is null)<DD><CODE>p_host</CODE> - the hostname, IPv4 address or IPv6 reference for the URI<DD><CODE>p_port</CODE> - the URI port (may be -1 for "unspecified"; cannot
               be specified if host is null)<DD><CODE>p_path</CODE> - the URI path - if the path contains '?' or '#',
               then the query string and/or fragment will be
               set from the path; however, if the query and
               fragment are specified both in the path and as
               separate parameters, an exception is thrown<DD><CODE>p_queryString</CODE> - the URI query string (cannot be specified
                      if path is null)<DD><CODE>p_fragment</CODE> - the URI fragment (cannot be specified if path
                   is null)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if any of the parameters violates
                                  syntax rules or semantic rules</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1><FONT SIZE="+2">
<B>Method Detail</B></FONT></TD>
</TR>
</TABLE>

<A NAME="absolutize(org.apache.axis.types.URI)"><!-- --></A><H3>
absolutize</H3>
<PRE>
public void <B>absolutize</B>(<A HREF="../../../../org/apache/axis/types/URI.html" title="class in org.apache.axis.types">URI</A>&nbsp;p_base)</PRE>
<DL>
<DD>Absolutize URI with given base URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_base</CODE> - base URI for absolutization</DL>
</DD>
</DL>
<HR>

<A NAME="getScheme()"><!-- --></A><H3>
getScheme</H3>
<PRE>
public java.lang.String <B>getScheme</B>()</PRE>
<DL>
<DD>Get the scheme for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the scheme for this URI</DL>
</DD>
</DL>
<HR>

<A NAME="getSchemeSpecificPart()"><!-- --></A><H3>
getSchemeSpecificPart</H3>
<PRE>
public java.lang.String <B>getSchemeSpecificPart</B>()</PRE>
<DL>
<DD>Get the scheme-specific part for this URI (everything following the
 scheme and the first colon). See RFC 2396 Section 5.2 for spec.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the scheme-specific part for this URI</DL>
</DD>
</DL>
<HR>

<A NAME="getUserinfo()"><!-- --></A><H3>
getUserinfo</H3>
<PRE>
public java.lang.String <B>getUserinfo</B>()</PRE>
<DL>
<DD>Get the userinfo for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the userinfo for this URI (null if not specified).</DL>
</DD>
</DL>
<HR>

<A NAME="getHost()"><!-- --></A><H3>
getHost</H3>
<PRE>
public java.lang.String <B>getHost</B>()</PRE>
<DL>
<DD>Get the host for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the host for this URI (null if not specified).</DL>
</DD>
</DL>
<HR>

<A NAME="getPort()"><!-- --></A><H3>
getPort</H3>
<PRE>
public int <B>getPort</B>()</PRE>
<DL>
<DD>Get the port for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the port for this URI (-1 if not specified).</DL>
</DD>
</DL>
<HR>

<A NAME="getRegBasedAuthority()"><!-- --></A><H3>
getRegBasedAuthority</H3>
<PRE>
public java.lang.String <B>getRegBasedAuthority</B>()</PRE>
<DL>
<DD>Get the registry based authority for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the registry based authority (null if not specified).</DL>
</DD>
</DL>
<HR>

<A NAME="getPath(boolean, boolean)"><!-- --></A><H3>
getPath</H3>
<PRE>
public java.lang.String <B>getPath</B>(boolean&nbsp;p_includeQueryString,
                                boolean&nbsp;p_includeFragment)</PRE>
<DL>
<DD>Get the path for this URI (optionally with the query string and
 fragment).
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_includeQueryString</CODE> - if true (and query string is not null),
                             then a "?" followed by the query string
                             will be appended<DD><CODE>p_includeFragment</CODE> - if true (and fragment is not null),
                             then a "#" followed by the fragment
                             will be appended
<DT><B>Returns:</B><DD>the path for this URI possibly including the query string
         and fragment</DL>
</DD>
</DL>
<HR>

<A NAME="getPath()"><!-- --></A><H3>
getPath</H3>
<PRE>
public java.lang.String <B>getPath</B>()</PRE>
<DL>
<DD>Get the path for this URI. Note that the value returned is the path
 only and does not include the query string or fragment.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the path for this URI.</DL>
</DD>
</DL>
<HR>

<A NAME="getQueryString()"><!-- --></A><H3>
getQueryString</H3>
<PRE>
public java.lang.String <B>getQueryString</B>()</PRE>
<DL>
<DD>Get the query string for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the query string for this URI. Null is returned if there
         was no "?" in the URI spec, empty string if there was a
         "?" but no query string following it.</DL>
</DD>
</DL>
<HR>

<A NAME="getFragment()"><!-- --></A><H3>
getFragment</H3>
<PRE>
public java.lang.String <B>getFragment</B>()</PRE>
<DL>
<DD>Get the fragment for this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the fragment for this URI. Null is returned if there
         was no "#" in the URI spec, empty string if there was a
         "#" but no fragment following it.</DL>
</DD>
</DL>
<HR>

<A NAME="setScheme(java.lang.String)"><!-- --></A><H3>
setScheme</H3>
<PRE>
public void <B>setScheme</B>(java.lang.String&nbsp;p_scheme)
               throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Set the scheme for this URI. The scheme is converted to lowercase
 before it is set.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_scheme</CODE> - the scheme for this URI (cannot be null)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_scheme is not a conformant
                                  scheme name</DL>
</DD>
</DL>
<HR>

<A NAME="setUserinfo(java.lang.String)"><!-- --></A><H3>
setUserinfo</H3>
<PRE>
public void <B>setUserinfo</B>(java.lang.String&nbsp;p_userinfo)
                 throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Set the userinfo for this URI. If a non-null value is passed in and
 the host value is null, then an exception is thrown.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_userinfo</CODE> - the userinfo for this URI
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_userinfo contains invalid
                                  characters</DL>
</DD>
</DL>
<HR>

<A NAME="setHost(java.lang.String)"><!-- --></A><H3>
setHost</H3>
<PRE>
public void <B>setHost</B>(java.lang.String&nbsp;p_host)
             throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD><p>Set the host for this URI. If null is passed in, the userinfo
 field is also set to null and the port is set to -1.</p>
 
 <p>Note: This method overwrites registry based authority if it
 previously existed in this URI.</p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_host</CODE> - the host for this URI
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_host is not a valid IP
                                  address or DNS hostname.</DL>
</DD>
</DL>
<HR>

<A NAME="setPort(int)"><!-- --></A><H3>
setPort</H3>
<PRE>
public void <B>setPort</B>(int&nbsp;p_port)
             throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Set the port for this URI. -1 is used to indicate that the port is
 not specified, otherwise valid port numbers are  between 0 and 65535.
 If a valid port number is passed in and the host field is null,
 an exception is thrown.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_port</CODE> - the port number for this URI
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_port is not -1 and not a
                                  valid port number</DL>
</DD>
</DL>
<HR>

<A NAME="setRegBasedAuthority(java.lang.String)"><!-- --></A><H3>
setRegBasedAuthority</H3>
<PRE>
public void <B>setRegBasedAuthority</B>(java.lang.String&nbsp;authority)
                          throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD><p>Sets the registry based authority for this URI.</p>
 
 <p>Note: This method overwrites server based authority
 if it previously existed in this URI.</p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>authority</CODE> - the registry based authority for this URI
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - it authority is not a
 well formed registry based authority</DL>
</DD>
</DL>
<HR>

<A NAME="setPath(java.lang.String)"><!-- --></A><H3>
setPath</H3>
<PRE>
public void <B>setPath</B>(java.lang.String&nbsp;p_path)
             throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Set the path for this URI. If the supplied path is null, then the
 query string and fragment are set to null as well. If the supplied
 path includes a query string and/or fragment, these fields will be
 parsed and set as well. Note that, for URIs following the "generic
 URI" syntax, the path specified should start with a slash.
 For URIs that do not follow the generic URI syntax, this method
 sets the scheme-specific part.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_path</CODE> - the path for this URI (may be null)
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_path contains invalid
                                  characters</DL>
</DD>
</DL>
<HR>

<A NAME="appendPath(java.lang.String)"><!-- --></A><H3>
appendPath</H3>
<PRE>
public void <B>appendPath</B>(java.lang.String&nbsp;p_addToPath)
                throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Append to the end of the path of this URI. If the current path does
 not end in a slash and the path to be appended does not begin with
 a slash, a slash will be appended to the current path before the
 new segment is added. Also, if the current path ends in a slash
 and the new segment begins with a slash, the extra slash will be
 removed before the new segment is appended.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_addToPath</CODE> - the new segment to be added to the current path
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_addToPath contains syntax
                                  errors</DL>
</DD>
</DL>
<HR>

<A NAME="setQueryString(java.lang.String)"><!-- --></A><H3>
setQueryString</H3>
<PRE>
public void <B>setQueryString</B>(java.lang.String&nbsp;p_queryString)
                    throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Set the query string for this URI. A non-null value is valid only
 if this is an URI conforming to the generic URI syntax and
 the path value is not null.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_queryString</CODE> - the query string for this URI
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_queryString is not null and this
                                  URI does not conform to the generic
                                  URI syntax or if the path is null</DL>
</DD>
</DL>
<HR>

<A NAME="setFragment(java.lang.String)"><!-- --></A><H3>
setFragment</H3>
<PRE>
public void <B>setFragment</B>(java.lang.String&nbsp;p_fragment)
                 throws <A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></PRE>
<DL>
<DD>Set the fragment for this URI. A non-null value is valid only
 if this is a URI conforming to the generic URI syntax and
 the path value is not null.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_fragment</CODE> - the fragment for this URI
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../../org/apache/axis/types/URI.MalformedURIException.html" title="class in org.apache.axis.types">URI.MalformedURIException</A></CODE> - if p_fragment is not null and this
                                  URI does not conform to the generic
                                  URI syntax or if the path is null</DL>
</DD>
</DL>
<HR>

<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
equals</H3>
<PRE>
public boolean <B>equals</B>(java.lang.Object&nbsp;p_test)</PRE>
<DL>
<DD>Determines if the passed-in Object is equivalent to this URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>p_test</CODE> - the Object to test for equality.
<DT><B>Returns:</B><DD>true if p_test is a URI with all values equal to this
         URI, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="hashCode()"><!-- --></A><H3>
hashCode</H3>
<PRE>
public int <B>hashCode</B>()</PRE>
<DL>
<DD>Returns a hash-code value for this URI.  The hash code is based upon all
 of the URI's components, and satisfies the general contract of the
 <CODE>Object.hashCode</CODE> method. </p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>A hash-code value for this URI</DL>
</DD>
</DL>
<HR>

<A NAME="toString()"><!-- --></A><H3>
toString</H3>
<PRE>
public java.lang.String <B>toString</B>()</PRE>
<DL>
<DD>Get the URI as a string specification. See RFC 2396 Section 5.2.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the URI string specification</DL>
</DD>
</DL>
<HR>

<A NAME="isGenericURI()"><!-- --></A><H3>
isGenericURI</H3>
<PRE>
public boolean <B>isGenericURI</B>()</PRE>
<DL>
<DD>Get the indicator as to whether this URI uses the "generic URI"
 syntax.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if this URI uses the "generic URI" syntax, false
         otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="isAbsoluteURI()"><!-- --></A><H3>
isAbsoluteURI</H3>
<PRE>
public boolean <B>isAbsoluteURI</B>()</PRE>
<DL>
<DD>Returns whether this URI represents an absolute URI.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if this URI represents an absolute URI, false
         otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="isConformantSchemeName(java.lang.String)"><!-- --></A><H3>
isConformantSchemeName</H3>
<PRE>
public static boolean <B>isConformantSchemeName</B>(java.lang.String&nbsp;p_scheme)</PRE>
<DL>
<DD>Determine whether a scheme conforms to the rules for a scheme name.
 A scheme is conformant if it starts with an alphanumeric, and
 contains only alphanumerics, '+','-' and '.'.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the scheme is conformant, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="isWellFormedAddress(java.lang.String)"><!-- --></A><H3>
isWellFormedAddress</H3>
<PRE>
public static boolean <B>isWellFormedAddress</B>(java.lang.String&nbsp;address)</PRE>
<DL>
<DD>Determine whether a string is syntactically capable of representing
 a valid IPv4 address, IPv6 reference or the domain name of a network host. 
 A valid IPv4 address consists of four decimal digit groups separated by a
 '.'. Each group must consist of one to three digits. See RFC 2732 Section 3,
 and RFC 2373 Section 2.2, for the definition of IPv6 references. A hostname 
 consists of domain labels (each of which must begin and end with an alphanumeric 
 but may contain '-') separated & by a '.'. See RFC 2396 Section 3.2.2.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the string is a syntactically valid IPv4 address, 
 IPv6 reference or hostname</DL>
</DD>
</DL>
<HR>

<A NAME="isWellFormedIPv4Address(java.lang.String)"><!-- --></A><H3>
isWellFormedIPv4Address</H3>
<PRE>
public static boolean <B>isWellFormedIPv4Address</B>(java.lang.String&nbsp;address)</PRE>
<DL>
<DD><p>Determines whether a string is an IPv4 address as defined by 
 RFC 2373, and under the further constraint that it must be a 32-bit
 address. Though not expressed in the grammar, in order to satisfy 
 the 32-bit address constraint, each segment of the address cannot 
 be greater than 255 (8 bits of information).</p>

 <p><code>IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT</code></p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the string is a syntactically valid IPv4 address</DL>
</DD>
</DL>
<HR>

<A NAME="isWellFormedIPv6Reference(java.lang.String)"><!-- --></A><H3>
isWellFormedIPv6Reference</H3>
<PRE>
public static boolean <B>isWellFormedIPv6Reference</B>(java.lang.String&nbsp;address)</PRE>
<DL>
<DD><p>Determines whether a string is an IPv6 reference as defined
 by RFC 2732, where IPv6address is defined in RFC 2373. The 
 IPv6 address is parsed according to Section 2.2 of RFC 2373,
 with the additional constraint that the address be composed of
 128 bits of information.</p>

 <p><code>IPv6reference = "[" IPv6address "]"</code></p>

 <p>Note: The BNF expressed in RFC 2373 Appendix B does not 
 accurately describe section 2.2, and was in fact removed from
 RFC 3513, the successor of RFC 2373.</p>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the string is a syntactically valid IPv6 reference</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/URI.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../org/apache/axis/types/UnsignedShort.html" title="class in org.apache.axis.types"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../org/apache/axis/types/Year.html" title="class in org.apache.axis.types"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="URI.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>

</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>
Copyright © 2005 Apache Web Services Project. All Rights Reserved.
</BODY>
</HTML>
