/* |
|
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. |
|
*/ |
|
/* |
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
|
* contributor license agreements. See the NOTICE file distributed with |
|
* this work for additional information regarding copyright ownership. |
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
|
* (the "License"); you may not use this file except in compliance with |
|
* the License. You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
package com.sun.org.apache.xerces.internal.util; |
|
import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier; |
|
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource; |
|
import java.io.InputStream; |
|
import java.io.Reader; |
|
import java.util.HashMap; |
|
import java.util.Iterator; |
|
import java.util.Map; |
|
/** |
|
* This class represents an input source for an XML resource |
|
* retrievable over HTTP. In addition to the properties |
|
* provided by an <code>XMLInputSource</code> an HTTP input |
|
* source also has HTTP request properties and a preference |
|
* whether HTTP redirects will be followed. Note that these |
|
* properties will only be used if reading this input source |
|
* will induce an HTTP connection. |
|
* |
|
* @author Michael Glavassevich, IBM |
|
* |
|
*/ |
|
public final class HTTPInputSource extends XMLInputSource { |
|
// |
|
// Data |
|
// |
|
/** Preference for whether HTTP redirects should be followed. **/ |
|
protected boolean fFollowRedirects = true; |
|
/** HTTP request properties. **/ |
|
protected Map<String, String> fHTTPRequestProperties = new HashMap<>(); |
|
// |
|
// Constructors |
|
// |
|
/** |
|
* Constructs an input source from just the public and system |
|
* identifiers, leaving resolution of the entity and opening of |
|
* the input stream up to the caller. |
|
* |
|
* @param publicId The public identifier, if known. |
|
* @param systemId The system identifier. This value should |
|
* always be set, if possible, and can be |
|
* relative or absolute. If the system identifier |
|
* is relative, then the base system identifier |
|
* should be set. |
|
* @param baseSystemId The base system identifier. This value should |
|
* always be set to the fully expanded URI of the |
|
* base system identifier, if possible. |
|
*/ |
|
public HTTPInputSource(String publicId, String systemId, String baseSystemId) { |
|
super(publicId, systemId, baseSystemId, false); |
|
} // <init>(String,String,String) |
|
/** |
|
* Constructs an input source from a XMLResourceIdentifier |
|
* object, leaving resolution of the entity and opening of |
|
* the input stream up to the caller. |
|
* |
|
* @param resourceIdentifier the XMLResourceIdentifier containing the information |
|
*/ |
|
public HTTPInputSource(XMLResourceIdentifier resourceIdentifier) { |
|
super(resourceIdentifier); |
|
} // <init>(XMLResourceIdentifier) |
|
/** |
|
* Constructs an input source from a byte stream. |
|
* |
|
* @param publicId The public identifier, if known. |
|
* @param systemId The system identifier. This value should |
|
* always be set, if possible, and can be |
|
* relative or absolute. If the system identifier |
|
* is relative, then the base system identifier |
|
* should be set. |
|
* @param baseSystemId The base system identifier. This value should |
|
* always be set to the fully expanded URI of the |
|
* base system identifier, if possible. |
|
* @param byteStream The byte stream. |
|
* @param encoding The encoding of the byte stream, if known. |
|
*/ |
|
public HTTPInputSource(String publicId, String systemId, |
|
String baseSystemId, InputStream byteStream, String encoding) { |
|
super(publicId, systemId, baseSystemId, byteStream, encoding); |
|
} // <init>(String,String,String,InputStream,String) |
|
/** |
|
* Constructs an input source from a character stream. |
|
* |
|
* @param publicId The public identifier, if known. |
|
* @param systemId The system identifier. This value should |
|
* always be set, if possible, and can be |
|
* relative or absolute. If the system identifier |
|
* is relative, then the base system identifier |
|
* should be set. |
|
* @param baseSystemId The base system identifier. This value should |
|
* always be set to the fully expanded URI of the |
|
* base system identifier, if possible. |
|
* @param charStream The character stream. |
|
* @param encoding The original encoding of the byte stream |
|
* used by the reader, if known. |
|
*/ |
|
public HTTPInputSource(String publicId, String systemId, |
|
String baseSystemId, Reader charStream, String encoding) { |
|
super(publicId, systemId, baseSystemId, charStream, encoding); |
|
} // <init>(String,String,String,Reader,String) |
|
// |
|
// Public methods |
|
// |
|
/** |
|
* Returns the preference whether HTTP redirects should |
|
* be followed. By default HTTP redirects will be followed. |
|
*/ |
|
public boolean getFollowHTTPRedirects() { |
|
return fFollowRedirects; |
|
} // getFollowHTTPRedirects():boolean |
|
/** |
|
* Sets the preference whether HTTP redirects should |
|
* be followed. By default HTTP redirects will be followed. |
|
*/ |
|
public void setFollowHTTPRedirects(boolean followRedirects) { |
|
fFollowRedirects = followRedirects; |
|
} // setFollowHTTPRedirects(boolean) |
|
/** |
|
* Returns the value of the request property |
|
* associated with the given property name. |
|
* |
|
* @param key the name of the request property |
|
* @return the value of the request property or |
|
* <code>null</code> if this property has not |
|
* been set |
|
*/ |
|
public String getHTTPRequestProperty(String key) { |
|
return fHTTPRequestProperties.get(key); |
|
} // getHTTPRequestProperty(String):String |
|
/** |
|
* Returns an iterator for the request properties this |
|
* input source contains. Each object returned by the |
|
* iterator is an instance of <code>java.util.Map.Entry</code> |
|
* where each key and value are a pair of strings corresponding |
|
* to the name and value of a request property. |
|
* |
|
* @return an iterator for the request properties this |
|
* input source contains |
|
*/ |
|
public Iterator<Map.Entry<String, String>> getHTTPRequestProperties() { |
|
return fHTTPRequestProperties.entrySet().iterator(); |
|
} // getHTTPRequestProperties():Iterator |
|
/** |
|
* Sets the value of the request property |
|
* associated with the given property name. |
|
* |
|
* @param key the name of the request property |
|
* @param value the value of the request property |
|
*/ |
|
public void setHTTPRequestProperty(String key, String value) { |
|
if (value != null) { |
|
fHTTPRequestProperties.put(key, value); |
|
} |
|
else { |
|
fHTTPRequestProperties.remove(key); |
|
} |
|
} // setHTTPRequestProperty(String,String) |
|
} // class HTTPInputSource |