Class ParsedURL
URL-like class that supports custom URI schemes
and GZIP encoding.
This class is used as a replacement for URL.
This is done for several reasons. First, unlike URL
this class will accept and parse as much of a URL as possible, without
throwing a MalformedURLException. This makes it useful
for simply parsing a URL string (hence its name).
Second, it allows for extension of the URI schemes supported by the
parser. Batik uses this to support the
data: URL scheme (RFC2397).
Third, by default it checks the streams that it opens to see if they are GZIP compressed, and if so it automatically uncompresses them (avoiding opening the stream twice in the process).
It is worth noting that most real work is defered to the
ParsedURLData class to which most methods are forwarded.
This is done because it allows a constructor interface to ParsedURL
(mostly for compatability with core URL), in spite of the fact that
the real implemenation uses the protocol handlers as factories for protocol
specific instances of the ParsedURLData class.
- Version:
- $Id$
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) ParsedURLDataThe data class we defer most things to.private static ParsedURLProtocolHandlerThe default protocol handler.private static Stringprivate static MapThis maps between protocol names and ParsedURLProtocolHandler instances.(package private) StringThe user agent to associate with this URL -
Constructor Summary
ConstructorsConstructorDescriptionConstruct a ParsedURL from the given url string.Construct a sub URL from two strings.Construct a ParsedURL from the given java.net.URL instance.Construct a sub URL from a base URL and a string for the sub url.Construct a sub URL from a base ParsedURL and a string for the sub url. -
Method Summary
Modifier and TypeMethodDescriptionstatic InputStreamcheckGZIP(InputStream is) This is a utility function others can call that checks if is is a GZIP stream if so it returns a GZIPInputStream that will decode the contents, otherwise it returns (or a buffered version of is) untouched.booleancomplete()Returns true if the URL looks well formed and complete.booleanImplement Object.equals.Returns the content encoding if available.Returns the content type if available.Returns the content type's charset parameter, if available.Returns the content type's type/subtype, if available.static Stringstatic ParsedURLProtocolHandlergetHandler(String protocol) Returns the handler for a particular protocol.private static MapReturns the shared instance of HandlersMap.getHost()Returns the host for this URL, if any,nullif there isn't one or it doesn't make sense for the protocol.getPath()Returns the path for this URL, if any (where appropriate for the protocol this also includes the file, not just directory).intgetPort()Returns the port on the host to connect to, if it was specified in the url that was parsed, otherwise returns -1.Returns the URL up to and include the port number on the host.Returns the URL that was ultimately used to fetch the resource represented by thisParsedURL.Returns the protocol for this URL.protected static StringgetProtocol(String urlStr) Parse out the protocol from a url string.getRef()Returns the 'fragment' reference in the URL.Return the user agent current associated with this url (or null if none).booleanhasContentTypeParameter(String param) Returns whether the Content-Type header has the given parameter.inthashCode()Implement Object.hashCode.Attempt to open the stream checking for common compression types, and automatically decompressing them if found.openStream(String mimeType) Attempt to open the stream checking for common compression types, and automatically decompressing them if found.openStream(String[] mimeTypes) Attempt to open the stream checking for common compression types, and automatically decompressing them if found.openStream(Iterator mimeTypes) Attempt to open the stream checking for common compression types, and automatically decompressing them if found.Attempt to open the stream, does no checking for compression types.openStreamRaw(String mimeType) Attempt to open the stream, does no checking for compression types.openStreamRaw(String[] mimeTypes) Attempt to open the stream, does no checking for comression types.openStreamRaw(Iterator mimeTypes) Attempt to open the stream, does no checking for comression types.static ParsedURLDataFactory method to construct an appropriate subclass of ParsedURLDatastatic ParsedURLDataFactory method to construct an appropriate subclass of ParsedURLData, for a sub url.static ParsedURLDataFactory method to construct an appropriate subclass of ParsedURLData, for a sub url.static voidregisterHandler(ParsedURLProtocolHandler handler) Registers a Protocol handler by adding it to the handlers map.booleanstatic voidsetGlobalUserAgent(String userAgent) voidsetUserAgent(String userAgent) Sets the user agent associated with this url (null clears any associated user agent).toString()Return a string rep of the URL (can be passed back into the constructor if desired).
-
Field Details
-
data
ParsedURLData dataThe data class we defer most things to. -
userAgent
String userAgentThe user agent to associate with this URL -
handlersMap
This maps between protocol names and ParsedURLProtocolHandler instances. -
defaultHandler
The default protocol handler. This handler is used when other handlers fail or no match for a protocol can be found. -
globalUserAgent
-
-
Constructor Details
-
ParsedURL
Construct a ParsedURL from the given url string.- Parameters:
urlStr- The string to try and parse as a URL
-
ParsedURL
Construct a ParsedURL from the given java.net.URL instance. This is useful if you already have a valid java.net.URL instance. This bypasses most of the parsing and hence is quicker and less prone to reinterpretation than converting the URL to a string before construction.- Parameters:
url- The URL to "mimic".
-
ParsedURL
-
ParsedURL
-
ParsedURL
-
-
Method Details
-
getGlobalUserAgent
-
setGlobalUserAgent
-
getHandlersMap
Returns the shared instance of HandlersMap. This method is also responsible for initializing the handler map if this is the first time it has been requested since the class was loaded. -
getHandler
Returns the handler for a particular protocol. If protocol isnullor no match is found in the handlers map it returns the default protocol handler.- Parameters:
protocol- The protocol to get a handler for.
-
registerHandler
Registers a Protocol handler by adding it to the handlers map. If the given protocol handler returnsnullas it's supported protocol then it is registered as the default protocol handler.- Parameters:
handler- the new Protocol Handler to register
-
checkGZIP
This is a utility function others can call that checks if is is a GZIP stream if so it returns a GZIPInputStream that will decode the contents, otherwise it returns (or a buffered version of is) untouched.- Parameters:
is- Stream that may potentially be a GZIP stream.- Throws:
IOException
-
toString
-
getPostConnectionURL
Returns the URL that was ultimately used to fetch the resource represented by thisParsedURL. For HTTP URLs, this will result in the post-redirect URL being returned. If there was no redirect, or if this isn't an HTTP URL, the original URL is returned (the same string astoString()). -
equals
-
hashCode
-
complete
public boolean complete()Returns true if the URL looks well formed and complete. This does not guarantee that the stream can be opened but is a good indication that things aren't totally messed up. -
getUserAgent
Return the user agent current associated with this url (or null if none). -
setUserAgent
Sets the user agent associated with this url (null clears any associated user agent). -
getProtocol
Returns the protocol for this URL. The protocol is everything upto the first ':'. -
getHost
Returns the host for this URL, if any,nullif there isn't one or it doesn't make sense for the protocol. -
getPort
public int getPort()Returns the port on the host to connect to, if it was specified in the url that was parsed, otherwise returns -1. -
getPath
Returns the path for this URL, if any (where appropriate for the protocol this also includes the file, not just directory). Note that getPath appears in JDK 1.3 as a synonym for getFile from JDK 1.2. -
getRef
Returns the 'fragment' reference in the URL. -
getPortStr
Returns the URL up to and include the port number on the host. Does not include the path or fragment pieces. -
getContentType
Returns the content type if available. This is only available for some protocols. -
getContentTypeMediaType
Returns the content type's type/subtype, if available. This is only available for some protocols. -
getContentTypeCharset
Returns the content type's charset parameter, if available. This is only available for some protocols. -
hasContentTypeParameter
Returns whether the Content-Type header has the given parameter. -
getContentEncoding
Returns the content encoding if available. This is only available for some protocols. -
openStream
Attempt to open the stream checking for common compression types, and automatically decompressing them if found.- Throws:
IOException
-
openStream
Attempt to open the stream checking for common compression types, and automatically decompressing them if found.- Parameters:
mimeType- The expected mime type of the content in the returned InputStream (mapped to Http accept header among other possibilities).- Throws:
IOException
-
openStream
Attempt to open the stream checking for common compression types, and automatically decompressing them if found.- Parameters:
mimeTypes- The expected mime types of the content in the returned InputStream (mapped to Http accept header among other possabilities).- Throws:
IOException
-
openStream
Attempt to open the stream checking for common compression types, and automatically decompressing them if found.- Parameters:
mimeTypes- The expected mime types of the content in the returned InputStream (mapped to Http accept header among other possabilities). The elements of the iterator must be strings.- Throws:
IOException
-
openStreamRaw
Attempt to open the stream, does no checking for compression types.- Throws:
IOException
-
openStreamRaw
Attempt to open the stream, does no checking for compression types.- Parameters:
mimeType- The expected mime type of the content in the returned InputStream (mapped to Http accept header among other possabilities).- Throws:
IOException
-
openStreamRaw
Attempt to open the stream, does no checking for comression types.- Parameters:
mimeTypes- The expected mime types of the content in the returned InputStream (mapped to Http accept header among other possabilities).- Throws:
IOException
-
openStreamRaw
Attempt to open the stream, does no checking for comression types.- Parameters:
mimeTypes- The expected mime types of the content in the returned InputStream (mapped to Http accept header among other possabilities). The elements of the iterator must be strings.- Throws:
IOException
-
sameFile
-
getProtocol
-
parseURL
Factory method to construct an appropriate subclass of ParsedURLData- Parameters:
urlStr- the string to parse.
-
parseURL
Factory method to construct an appropriate subclass of ParsedURLData, for a sub url.- Parameters:
baseStr- The base URL string to parse.urlStr- the sub URL string to parse.
-
parseURL
Factory method to construct an appropriate subclass of ParsedURLData, for a sub url.- Parameters:
baseURL- The base ParsedURL to parse.urlStr- the sub URL string to parse.
-