Merge
This commit is contained in:
commit
366e45411f
@ -530,6 +530,10 @@ public class Parser implements Constants, ContentHandler {
|
||||
XMLSecurityManager.printWarning(reader.getClass().getName(), lastProperty, se);
|
||||
}
|
||||
|
||||
// try setting other JDK-impl properties, ignore if not supported
|
||||
JdkXmlUtils.setXMLReaderPropertyIfSupport(reader, JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
_xsltc.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE), false);
|
||||
|
||||
return(parse(reader, input));
|
||||
}
|
||||
catch (ParserConfigurationException e) {
|
||||
@ -1342,12 +1346,14 @@ public class Parser implements Constants, ContentHandler {
|
||||
}
|
||||
else {
|
||||
SyntaxTreeNode parent = _parentStack.peek();
|
||||
|
||||
if (element.getClass().isAssignableFrom(Import.class) &&
|
||||
parent.notTypeOf(Import.class)) {
|
||||
ErrorMsg err = new ErrorMsg(ErrorMsg.IMPORT_PRECEDE_OTHERS_ERR,
|
||||
prefix+':'+localname);
|
||||
throw new SAXException(err.toString());
|
||||
}
|
||||
|
||||
parent.addElement(element);
|
||||
element.setParent(parent);
|
||||
}
|
||||
|
@ -43,12 +43,14 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Properties;
|
||||
import java.util.Vector;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarOutputStream;
|
||||
import java.util.jar.Manifest;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.catalog.CatalogFeatures;
|
||||
import jdk.xml.internal.JdkXmlFeatures;
|
||||
import jdk.xml.internal.JdkXmlUtils;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.XMLReader;
|
||||
|
||||
@ -116,8 +118,8 @@ public final class XSLTC {
|
||||
private File _destDir = null; // -d <directory-name>
|
||||
private int _outputType = FILE_OUTPUT; // by default
|
||||
|
||||
private Vector _classes;
|
||||
private Vector _bcelClasses;
|
||||
private ArrayList<ByteArrayOutputStream> _classes;
|
||||
private ArrayList<JavaClass> _bcelClasses;
|
||||
private boolean _callsNodeset = false;
|
||||
private boolean _multiDocument = false;
|
||||
private boolean _hasIdCall = false;
|
||||
@ -160,13 +162,18 @@ public final class XSLTC {
|
||||
/**
|
||||
* HashMap with the loaded classes
|
||||
*/
|
||||
private final Map<String, Class> _externalExtensionFunctions;
|
||||
private final Map<String, Class<?>> _externalExtensionFunctions;
|
||||
|
||||
/**
|
||||
* Catalog features
|
||||
*/
|
||||
CatalogFeatures _catalogFeatures;
|
||||
|
||||
/**
|
||||
* CDATA chunk size
|
||||
*/
|
||||
int _cdataChunkSize;
|
||||
|
||||
/**
|
||||
* XSLTC compiler constructor
|
||||
*/
|
||||
@ -230,6 +237,8 @@ public final class XSLTC {
|
||||
return _extensionClassLoader;
|
||||
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
|
||||
return _catalogFeatures;
|
||||
} else if (JdkXmlUtils.CDATA_CHUNK_SIZE.equals(name)) {
|
||||
return _cdataChunkSize;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -254,6 +263,8 @@ public final class XSLTC {
|
||||
_externalExtensionFunctions.clear();
|
||||
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
|
||||
_catalogFeatures = (CatalogFeatures)value;
|
||||
} else if (JdkXmlUtils.CDATA_CHUNK_SIZE.equals(name)) {
|
||||
_cdataChunkSize = Integer.parseInt((String)value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -284,11 +295,11 @@ public final class XSLTC {
|
||||
public void init() {
|
||||
reset();
|
||||
_reader = null;
|
||||
_classes = new Vector();
|
||||
_bcelClasses = new Vector();
|
||||
_classes = new ArrayList<>();
|
||||
_bcelClasses = new ArrayList<>();
|
||||
}
|
||||
|
||||
private void setExternalExtensionFunctions(String name, Class clazz) {
|
||||
private void setExternalExtensionFunctions(String name, Class<?> clazz) {
|
||||
if (_isSecureProcessing && clazz != null && !_externalExtensionFunctions.containsKey(name)) {
|
||||
_externalExtensionFunctions.put(name, clazz);
|
||||
}
|
||||
@ -319,7 +330,7 @@ public final class XSLTC {
|
||||
* Returns unmodifiable view of HashMap with loaded external extension
|
||||
* functions - will be needed for the TransformerImpl
|
||||
*/
|
||||
public Map<String, Class> getExternalExtensionFunctions() {
|
||||
public Map<String, Class<?>> getExternalExtensionFunctions() {
|
||||
return Collections.unmodifiableMap(_externalExtensionFunctions);
|
||||
}
|
||||
|
||||
@ -563,7 +574,7 @@ public final class XSLTC {
|
||||
final int count = _classes.size();
|
||||
final byte[][] result = new byte[count][1];
|
||||
for (int i = 0; i < count; i++)
|
||||
result[i] = (byte[])_classes.elementAt(i);
|
||||
result[i] = _classes.get(i).toByteArray();
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -907,7 +918,7 @@ public final class XSLTC {
|
||||
getOutputFile(clazz.getClassName()))));
|
||||
break;
|
||||
case JAR_OUTPUT:
|
||||
_bcelClasses.addElement(clazz);
|
||||
_bcelClasses.add(clazz);
|
||||
break;
|
||||
case BYTEARRAY_OUTPUT:
|
||||
case BYTEARRAY_AND_FILE_OUTPUT:
|
||||
@ -915,13 +926,13 @@ public final class XSLTC {
|
||||
case CLASSLOADER_OUTPUT:
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
|
||||
clazz.dump(out);
|
||||
_classes.addElement(out.toByteArray());
|
||||
_classes.add(out);
|
||||
|
||||
if (_outputType == BYTEARRAY_AND_FILE_OUTPUT)
|
||||
clazz.dump(new BufferedOutputStream(
|
||||
new FileOutputStream(getOutputFile(clazz.getClassName()))));
|
||||
else if (_outputType == BYTEARRAY_AND_JAR_OUTPUT)
|
||||
_bcelClasses.addElement(clazz);
|
||||
_bcelClasses.add(clazz);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -945,30 +956,24 @@ public final class XSLTC {
|
||||
// create the manifest
|
||||
final Manifest manifest = new Manifest();
|
||||
final java.util.jar.Attributes atrs = manifest.getMainAttributes();
|
||||
atrs.put(java.util.jar.Attributes.Name.MANIFEST_VERSION,"1.2");
|
||||
atrs.put(java.util.jar.Attributes.Name.MANIFEST_VERSION, "1.2");
|
||||
|
||||
final Map map = manifest.getEntries();
|
||||
final Map<String, Attributes> map = manifest.getEntries();
|
||||
// create manifest
|
||||
Enumeration classes = _bcelClasses.elements();
|
||||
final String now = (new Date()).toString();
|
||||
final java.util.jar.Attributes.Name dateAttr =
|
||||
new java.util.jar.Attributes.Name("Date");
|
||||
while (classes.hasMoreElements()) {
|
||||
final JavaClass clazz = (JavaClass)classes.nextElement();
|
||||
final String className = clazz.getClassName().replace('.','/');
|
||||
final java.util.jar.Attributes attr = new java.util.jar.Attributes();
|
||||
attr.put(dateAttr, now);
|
||||
map.put(className+".class", attr);
|
||||
}
|
||||
|
||||
final File jarFile = new File(_destDir, _jarFileName);
|
||||
final JarOutputStream jos =
|
||||
new JarOutputStream(new FileOutputStream(jarFile), manifest);
|
||||
classes = _bcelClasses.elements();
|
||||
while (classes.hasMoreElements()) {
|
||||
final JavaClass clazz = (JavaClass)classes.nextElement();
|
||||
final String className = clazz.getClassName().replace('.','/');
|
||||
jos.putNextEntry(new JarEntry(className+".class"));
|
||||
|
||||
for (JavaClass clazz : _bcelClasses) {
|
||||
final String className = clazz.getClassName().replace('.', '/');
|
||||
final java.util.jar.Attributes attr = new java.util.jar.Attributes();
|
||||
attr.put(dateAttr, now);
|
||||
map.put(className + ".class", attr);
|
||||
jos.putNextEntry(new JarEntry(className + ".class"));
|
||||
final ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
|
||||
clazz.dump(out); // dump() closes it's output stream
|
||||
out.writeTo(jos);
|
||||
|
@ -165,14 +165,14 @@ public final class TemplatesImpl implements Templates, Serializable {
|
||||
};
|
||||
|
||||
static final class TransletClassLoader extends ClassLoader {
|
||||
private final Map<String,Class> _loadedExternalExtensionFunctions;
|
||||
private final Map<String, Class<?>> _loadedExternalExtensionFunctions;
|
||||
|
||||
TransletClassLoader(ClassLoader parent) {
|
||||
super(parent);
|
||||
_loadedExternalExtensionFunctions = null;
|
||||
}
|
||||
|
||||
TransletClassLoader(ClassLoader parent,Map<String, Class> mapEF) {
|
||||
TransletClassLoader(ClassLoader parent, Map<String, Class<?>> mapEF) {
|
||||
super(parent);
|
||||
_loadedExternalExtensionFunctions = mapEF;
|
||||
}
|
||||
@ -215,7 +215,7 @@ public final class TemplatesImpl implements Templates, Serializable {
|
||||
/**
|
||||
* Create an XSLTC template object from the translet class definition(s).
|
||||
*/
|
||||
protected TemplatesImpl(Class[] transletClasses, String transletName,
|
||||
protected TemplatesImpl(Class<?>[] transletClasses, String transletName,
|
||||
Properties outputProperties, int indentNumber,
|
||||
TransformerFactoryImpl tfactory)
|
||||
{
|
||||
@ -481,6 +481,7 @@ public final class TemplatesImpl implements Templates, Serializable {
|
||||
|
||||
// the module needs access to runtime classes
|
||||
Module thisModule = TemplatesImpl.class.getModule();
|
||||
|
||||
Arrays.asList(Constants.PKGS_USED_BY_TRANSLET_CLASSES).forEach(p -> {
|
||||
thisModule.addExports(p, m);
|
||||
});
|
||||
|
@ -222,7 +222,8 @@ public class TransformerFactoryImpl
|
||||
private boolean _useServicesMechanism;
|
||||
|
||||
/**
|
||||
* protocols allowed for external references set by the stylesheet processing instruction, Import and Include element.
|
||||
* protocols allowed for external references set by the stylesheet
|
||||
* processing instruction, Import and Include element.
|
||||
*/
|
||||
private String _accessExternalStylesheet = XalanConstants.EXTERNAL_ACCESS_DEFAULT;
|
||||
/**
|
||||
@ -240,7 +241,7 @@ public class TransformerFactoryImpl
|
||||
// Unmodifiable view of external extension function from xslt compiler
|
||||
// It will be populated by user-specified extension functions during the
|
||||
// type checking
|
||||
private Map<String, Class> _xsltcExtensionFunctions;
|
||||
private Map<String, Class<?>> _xsltcExtensionFunctions;
|
||||
|
||||
CatalogResolver _catalogUriResolver;
|
||||
CatalogFeatures _catalogFeatures;
|
||||
@ -251,6 +252,8 @@ public class TransformerFactoryImpl
|
||||
String _catalogPrefer = null;
|
||||
String _catalogResolve = null;
|
||||
|
||||
int _cdataChunkSize = JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT;
|
||||
|
||||
/**
|
||||
* javax.xml.transform.sax.TransformerFactory implementation.
|
||||
*/
|
||||
@ -283,7 +286,7 @@ public class TransformerFactoryImpl
|
||||
_xsltcExtensionFunctions = null;
|
||||
}
|
||||
|
||||
public Map<String,Class> getExternalExtensionsMap() {
|
||||
public Map<String, Class<?>> getExternalExtensionsMap() {
|
||||
return _xsltcExtensionFunctions;
|
||||
}
|
||||
|
||||
@ -367,6 +370,8 @@ public class TransformerFactoryImpl
|
||||
return _catalogResolve;
|
||||
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
|
||||
return buildCatalogFeatures();
|
||||
} else if (JdkXmlUtils.CDATA_CHUNK_SIZE.equals(name)) {
|
||||
return _cdataChunkSize;
|
||||
}
|
||||
|
||||
/** Check to see if the property is managed by the security manager **/
|
||||
@ -507,6 +512,9 @@ public class TransformerFactoryImpl
|
||||
_catalogResolve = (String) value;
|
||||
cfBuilder = CatalogFeatures.builder().with(Feature.RESOLVE, _catalogResolve);
|
||||
return;
|
||||
} else if (JdkXmlUtils.CDATA_CHUNK_SIZE.equals(name)) {
|
||||
_cdataChunkSize = JdkXmlUtils.getValue(value, _cdataChunkSize);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_xmlSecurityManager != null &&
|
||||
@ -896,10 +904,10 @@ public class TransformerFactoryImpl
|
||||
transletName = _packageName + "." + transletName;
|
||||
|
||||
try {
|
||||
final Class clazz = ObjectFactory.findProviderClass(transletName, true);
|
||||
final Class<?> clazz = ObjectFactory.findProviderClass(transletName, true);
|
||||
resetTransientAttributes();
|
||||
|
||||
templates = new TemplatesImpl(new Class[]{clazz}, transletName, null, _indentNumber, this);
|
||||
templates = new TemplatesImpl(new Class<?>[]{clazz}, transletName, null, _indentNumber, this);
|
||||
if (_uriResolver != null) {
|
||||
templates.setURIResolver(_uriResolver);
|
||||
}
|
||||
|
@ -230,6 +230,7 @@ public final class TransformerImpl extends Transformer
|
||||
// Catalog is enabled by default
|
||||
boolean _useCatalog = true;
|
||||
|
||||
int _cdataChunkSize = JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT;
|
||||
|
||||
/**
|
||||
* This class wraps an ErrorListener into a MessageHandler in order to
|
||||
@ -284,6 +285,9 @@ public final class TransformerImpl extends Transformer
|
||||
_readerManager.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, _accessExternalDTD);
|
||||
_readerManager.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, _isSecureProcessing);
|
||||
_readerManager.setProperty(XalanConstants.SECURITY_MANAGER, _securityManager);
|
||||
_cdataChunkSize = JdkXmlUtils.getValue(_tfactory.getAttribute(JdkXmlUtils.CDATA_CHUNK_SIZE),
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
_readerManager.setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE, _cdataChunkSize);
|
||||
|
||||
_useCatalog = _tfactory.getFeature(XMLConstants.USE_CATALOG);
|
||||
if (_useCatalog) {
|
||||
|
@ -137,13 +137,11 @@ public final class Util {
|
||||
reader.setFeature
|
||||
("http://xml.org/sax/features/namespace-prefixes",false);
|
||||
|
||||
try {
|
||||
reader.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD,
|
||||
xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_DTD));
|
||||
} catch (SAXNotRecognizedException e) {
|
||||
XMLSecurityManager.printWarning(reader.getClass().getName(),
|
||||
XMLConstants.ACCESS_EXTERNAL_DTD, e);
|
||||
}
|
||||
JdkXmlUtils.setXMLReaderPropertyIfSupport(reader, XMLConstants.ACCESS_EXTERNAL_DTD,
|
||||
xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_DTD), true);
|
||||
|
||||
JdkXmlUtils.setXMLReaderPropertyIfSupport(reader, JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
xsltc.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE), false);
|
||||
|
||||
String lastProperty = "";
|
||||
try {
|
||||
|
@ -292,7 +292,8 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
addRecognizedProperties(recognizedProperties);
|
||||
|
||||
@ -368,6 +369,8 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
setProperty(f.getPropertyName(), null);
|
||||
}
|
||||
|
||||
setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
} // <init>(SymbolTable)
|
||||
|
||||
|
||||
|
@ -144,6 +144,8 @@ public class PropertyManager {
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
supportedProps.put(f.getPropertyName(), null);
|
||||
}
|
||||
|
||||
supportedProps.put(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
}
|
||||
|
||||
private void initWriterProps(){
|
||||
|
@ -1041,14 +1041,14 @@ public class XML11EntityScanner
|
||||
*
|
||||
* @param delimiter The string that signifies the end of the character
|
||||
* data to be scanned.
|
||||
* @param data The data structure to fill.
|
||||
* @param buffer The data structure to fill.
|
||||
* @param chunkLimit the size limit of the data to be scanned
|
||||
*
|
||||
* @return Returns true if there is more data to scan, false otherwise.
|
||||
*
|
||||
* @throws IOException Thrown if i/o error occurs.
|
||||
* @throws EOFException Thrown on end of file.
|
||||
*/
|
||||
protected boolean scanData(String delimiter, XMLStringBuffer buffer)
|
||||
protected boolean scanData(String delimiter, XMLStringBuffer buffer, int chunkLimit)
|
||||
throws IOException {
|
||||
|
||||
boolean done = false;
|
||||
@ -1152,82 +1152,50 @@ public class XML11EntityScanner
|
||||
}
|
||||
|
||||
// iterate over buffer looking for delimiter
|
||||
if (external) {
|
||||
OUTER: while (fCurrentEntity.position < fCurrentEntity.count) {
|
||||
c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (c == charAt0) {
|
||||
// looks like we just hit the delimiter
|
||||
int delimOffset = fCurrentEntity.position - 1;
|
||||
for (int i = 1; i < delimLen; i++) {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
fCurrentEntity.position -= i;
|
||||
break OUTER;
|
||||
}
|
||||
c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (delimiter.charAt(i) != c) {
|
||||
fCurrentEntity.position--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fCurrentEntity.position == delimOffset + delimLen) {
|
||||
done = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (c == '\n' || c == '\r' || c == 0x85 || c == 0x2028) {
|
||||
fCurrentEntity.position--;
|
||||
break;
|
||||
}
|
||||
// In external entities control characters cannot appear
|
||||
// as literals so do not skip over them.
|
||||
else if (!XML11Char.isXML11ValidLiteral(c)) {
|
||||
fCurrentEntity.position--;
|
||||
int length = fCurrentEntity.position - offset;
|
||||
fCurrentEntity.columnNumber += length - newlines;
|
||||
checkEntityLimit(NameType.COMMENT, fCurrentEntity, offset, length);
|
||||
buffer.append(fCurrentEntity.ch, offset, length);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
OUTER: while (fCurrentEntity.position < fCurrentEntity.count) {
|
||||
c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (c == charAt0) {
|
||||
// looks like we just hit the delimiter
|
||||
int delimOffset = fCurrentEntity.position - 1;
|
||||
for (int i = 1; i < delimLen; i++) {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
fCurrentEntity.position -= i;
|
||||
break OUTER;
|
||||
}
|
||||
c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (delimiter.charAt(i) != c) {
|
||||
fCurrentEntity.position--;
|
||||
break;
|
||||
}
|
||||
OUTER: while (fCurrentEntity.position < fCurrentEntity.count) {
|
||||
c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (c == charAt0) {
|
||||
// looks like we just hit the delimiter
|
||||
int delimOffset = fCurrentEntity.position - 1;
|
||||
for (int i = 1; i < delimLen; i++) {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
fCurrentEntity.position -= i;
|
||||
break OUTER;
|
||||
}
|
||||
if (fCurrentEntity.position == delimOffset + delimLen) {
|
||||
done = true;
|
||||
c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (delimiter.charAt(i) != c) {
|
||||
fCurrentEntity.position--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (c == '\n') {
|
||||
fCurrentEntity.position--;
|
||||
}
|
||||
if (fCurrentEntity.position == delimOffset + delimLen) {
|
||||
done = true;
|
||||
break;
|
||||
}
|
||||
// Control characters are allowed to appear as literals
|
||||
// in internal entities.
|
||||
else if (!XML11Char.isXML11Valid(c)) {
|
||||
fCurrentEntity.position--;
|
||||
int length = fCurrentEntity.position - offset;
|
||||
fCurrentEntity.columnNumber += length - newlines;
|
||||
checkEntityLimit(NameType.COMMENT, fCurrentEntity, offset, length);
|
||||
buffer.append(fCurrentEntity.ch, offset, length);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((external && (c == '\n' || c == '\r' || c == 0x85 || c == 0x2028))
|
||||
|| (!external && c == '\n')) {
|
||||
fCurrentEntity.position--;
|
||||
break;
|
||||
}
|
||||
// In external entities control characters cannot appear
|
||||
// as literals so do not skip over them.
|
||||
else if ((external && !XML11Char.isXML11ValidLiteral(c))
|
||||
// Control characters are allowed to appear as literals in internal entities.
|
||||
|| (!external && !XML11Char.isXML11Valid(c))) {
|
||||
fCurrentEntity.position--;
|
||||
int length = fCurrentEntity.position - offset;
|
||||
fCurrentEntity.columnNumber += length - newlines;
|
||||
checkEntityLimit(NameType.COMMENT, fCurrentEntity, offset, length);
|
||||
buffer.append(fCurrentEntity.ch, offset, length);
|
||||
return true;
|
||||
}
|
||||
if (chunkLimit > 0 &&
|
||||
(buffer.length + fCurrentEntity.position - offset) >= chunkLimit) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int length = fCurrentEntity.position - offset;
|
||||
fCurrentEntity.columnNumber += length - newlines;
|
||||
checkEntityLimit(NameType.COMMENT, fCurrentEntity, offset, length);
|
||||
@ -1236,8 +1204,10 @@ public class XML11EntityScanner
|
||||
}
|
||||
buffer.append(fCurrentEntity.ch, offset, length);
|
||||
|
||||
// return true if string was skipped
|
||||
} while (!done);
|
||||
if (chunkLimit > 0 && buffer.length >= chunkLimit) {
|
||||
break;
|
||||
}
|
||||
} while (!done && chunkLimit == 0);
|
||||
return !done;
|
||||
|
||||
} // scanData(String,XMLString)
|
||||
|
@ -388,7 +388,7 @@ implements XMLDTDScanner, XMLComponent, XMLEntityHandler {
|
||||
return false;
|
||||
|
||||
fStringBuffer.clear();
|
||||
while (fEntityScanner.scanData("]", fStringBuffer)) {
|
||||
while (fEntityScanner.scanData("]", fStringBuffer, 0)) {
|
||||
int c = fEntityScanner.peekChar();
|
||||
if (c != -1) {
|
||||
if (XMLChar.isHighSurrogate(c)) {
|
||||
|
@ -200,7 +200,8 @@ public class XMLDocumentFragmentScannerImpl
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
|
||||
/** Property defaults. */
|
||||
@ -212,7 +213,8 @@ public class XMLDocumentFragmentScannerImpl
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
null,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT
|
||||
};
|
||||
|
||||
|
||||
@ -269,6 +271,9 @@ public class XMLDocumentFragmentScannerImpl
|
||||
/** SubScanner state: inside scanContent method. */
|
||||
protected boolean fInScanContent = false;
|
||||
protected boolean fLastSectionWasCData = false;
|
||||
protected boolean fCDataStart = false;
|
||||
protected boolean fInCData = false;
|
||||
protected boolean fCDataEnd = false;
|
||||
protected boolean fLastSectionWasEntityReference = false;
|
||||
protected boolean fLastSectionWasCharacterData = false;
|
||||
|
||||
@ -318,6 +323,11 @@ public class XMLDocumentFragmentScannerImpl
|
||||
/** Xerces Feature: Disallow doctype declaration. */
|
||||
protected boolean fDisallowDoctype = false;
|
||||
|
||||
/**
|
||||
* CDATA chunk size limit
|
||||
*/
|
||||
private int fChunkSize;
|
||||
|
||||
/**
|
||||
* comma-delimited list of protocols that are allowed for the purpose
|
||||
* of accessing external dtd or entity references
|
||||
@ -490,12 +500,18 @@ public class XMLDocumentFragmentScannerImpl
|
||||
//therefore we don't need to take care of anything here. So Just break;
|
||||
break;
|
||||
case XMLStreamConstants.CDATA:
|
||||
fEntityScanner.checkNodeCount(fEntityScanner.fCurrentEntity);
|
||||
fDocumentHandler.startCDATA(null);
|
||||
//xxx: check if CDATA values comes from getCharacterData() function
|
||||
fEntityScanner.checkNodeCount(fEntityScanner.fCurrentEntity);
|
||||
if (fCDataStart) {
|
||||
fDocumentHandler.startCDATA(null);
|
||||
fCDataStart = false;
|
||||
fInCData = true;
|
||||
}
|
||||
|
||||
fDocumentHandler.characters(getCharacterData(),null);
|
||||
fDocumentHandler.endCDATA(null);
|
||||
//System.out.println(" in CDATA of the XMLNSDocumentScannerImpl");
|
||||
if (fCDataEnd) {
|
||||
fDocumentHandler.endCDATA(null);
|
||||
fCDataEnd = false;
|
||||
}
|
||||
break;
|
||||
case XMLStreamConstants.NOTATION_DECLARATION :
|
||||
break;
|
||||
@ -603,6 +619,8 @@ public class XMLDocumentFragmentScannerImpl
|
||||
fAccessExternalDTD = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
|
||||
|
||||
fStrictURI = componentManager.getFeature(STANDARD_URI_CONFORMANT, false);
|
||||
fChunkSize = JdkXmlUtils.getValue(componentManager.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE),
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
|
||||
resetCommon();
|
||||
//fEntityManager.test();
|
||||
@ -647,6 +665,8 @@ public class XMLDocumentFragmentScannerImpl
|
||||
fAccessExternalDTD = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
|
||||
|
||||
fSecurityManager = (XMLSecurityManager)propertyManager.getProperty(Constants.SECURITY_MANAGER);
|
||||
fChunkSize = JdkXmlUtils.getValue(propertyManager.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE),
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
resetCommon();
|
||||
} // reset(XMLComponentManager)
|
||||
|
||||
@ -1665,34 +1685,11 @@ public class XMLDocumentFragmentScannerImpl
|
||||
|
||||
while (true) {
|
||||
//scanData will fill the contentBuffer
|
||||
if (!fEntityScanner.scanData("]]>", contentBuffer)) {
|
||||
if (!fEntityScanner.scanData("]]>", contentBuffer, fChunkSize)) {
|
||||
fInCData = false;
|
||||
fCDataEnd = true;
|
||||
fMarkupDepth--;
|
||||
break ;
|
||||
/** We dont need all this code if we pass ']]>' as delimeter..
|
||||
* int brackets = 2;
|
||||
* while (fEntityScanner.skipChar(']')) {
|
||||
* brackets++;
|
||||
* }
|
||||
*
|
||||
* //When we find more than 2 square brackets
|
||||
* if (fDocumentHandler != null && brackets > 2) {
|
||||
* //we dont need to clear the buffer..
|
||||
* //contentBuffer.clear();
|
||||
* for (int i = 2; i < brackets; i++) {
|
||||
* contentBuffer.append(']');
|
||||
* }
|
||||
* fDocumentHandler.characters(contentBuffer, null);
|
||||
* }
|
||||
*
|
||||
* if (fEntityScanner.skipChar('>')) {
|
||||
* break;
|
||||
* }
|
||||
* if (fDocumentHandler != null) {
|
||||
* //we dont need to clear the buffer now..
|
||||
* //contentBuffer.clear();
|
||||
* contentBuffer.append("]]");
|
||||
* fDocumentHandler.characters(contentBuffer, null);
|
||||
* }
|
||||
**/
|
||||
} else {
|
||||
int c = fEntityScanner.peekChar();
|
||||
if (c != -1 && isInvalidLiteral(c)) {
|
||||
@ -1705,6 +1702,9 @@ public class XMLDocumentFragmentScannerImpl
|
||||
new Object[]{Integer.toString(c,16)});
|
||||
fEntityScanner.scanChar(null);
|
||||
}
|
||||
} else {
|
||||
//CData partially returned due to the size limit
|
||||
break;
|
||||
}
|
||||
//by this time we have also read surrogate contents if any...
|
||||
if (fDocumentHandler != null) {
|
||||
@ -1712,16 +1712,6 @@ public class XMLDocumentFragmentScannerImpl
|
||||
}
|
||||
}
|
||||
}
|
||||
fMarkupDepth--;
|
||||
|
||||
if (fDocumentHandler != null && contentBuffer.length > 0) {
|
||||
//fDocumentHandler.characters(contentBuffer, null);
|
||||
}
|
||||
|
||||
// call handler
|
||||
if (fDocumentHandler != null) {
|
||||
//fDocumentHandler.endCDATA(null);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@ -2635,6 +2625,7 @@ public class XMLDocumentFragmentScannerImpl
|
||||
}
|
||||
setScannerState(SCANNER_STATE_COMMENT);
|
||||
} else if (fEntityScanner.skipString(cdata)) {
|
||||
fCDataStart = true;
|
||||
setScannerState(SCANNER_STATE_CDATA );
|
||||
} else if (!scanForDoctypeHook()) {
|
||||
reportFatalError("MarkupNotRecognizedInContent",
|
||||
@ -3015,9 +3006,11 @@ public class XMLDocumentFragmentScannerImpl
|
||||
//xxx: What if CDATA is the first event
|
||||
//<foo><![CDATA[hello<><>]]>append</foo>
|
||||
|
||||
//we should not clear the buffer only when the last state was either SCANNER_STATE_REFERENCE or
|
||||
//we should not clear the buffer only when the last state was
|
||||
//either SCANNER_STATE_REFERENCE or
|
||||
//SCANNER_STATE_CHARACTER_DATA or SCANNER_STATE_REFERENCE
|
||||
if(fIsCoalesce && ( fLastSectionWasEntityReference || fLastSectionWasCData || fLastSectionWasCharacterData)){
|
||||
if(fIsCoalesce && ( fLastSectionWasEntityReference ||
|
||||
fLastSectionWasCData || fLastSectionWasCharacterData)){
|
||||
fLastSectionWasCData = true ;
|
||||
fLastSectionWasEntityReference = false;
|
||||
fLastSectionWasCharacterData = false;
|
||||
@ -3026,7 +3019,7 @@ public class XMLDocumentFragmentScannerImpl
|
||||
fContentBuffer.clear();
|
||||
}
|
||||
fUsebuffer = true;
|
||||
//CDATA section is completely read in all the case.
|
||||
//CDATA section is read up to the chunk size limit
|
||||
scanCDATASection(fContentBuffer , true);
|
||||
setScannerState(SCANNER_STATE_CONTENT);
|
||||
//1. if fIsCoalesce is set to true we set the variable fLastSectionWasCData to true
|
||||
@ -3036,13 +3029,16 @@ public class XMLDocumentFragmentScannerImpl
|
||||
//2. Check if application has set for reporting CDATA event
|
||||
//3. if the application has neither set the fIsCoalesce to true nor fReportCdataEvent
|
||||
//return the cdata event as characters.
|
||||
if(fIsCoalesce){
|
||||
if (fIsCoalesce) {
|
||||
fLastSectionWasCData = true ;
|
||||
//there might be more data to coalesce.
|
||||
continue;
|
||||
}else if(fReportCdataEvent){
|
||||
} else if(fReportCdataEvent) {
|
||||
if (!fCDataEnd) {
|
||||
setScannerState(SCANNER_STATE_CDATA);
|
||||
}
|
||||
return XMLEvent.CDATA;
|
||||
} else{
|
||||
} else {
|
||||
return XMLEvent.CHARACTERS;
|
||||
}
|
||||
}
|
||||
@ -3051,9 +3047,11 @@ public class XMLDocumentFragmentScannerImpl
|
||||
fMarkupDepth++;
|
||||
foundBuiltInRefs = false;
|
||||
|
||||
//we should not clear the buffer only when the last state was either CDATA or
|
||||
//we should not clear the buffer only when the last state was
|
||||
//either CDATA or
|
||||
//SCANNER_STATE_CHARACTER_DATA or SCANNER_STATE_REFERENCE
|
||||
if(fIsCoalesce && ( fLastSectionWasEntityReference || fLastSectionWasCData || fLastSectionWasCharacterData)){
|
||||
if(fIsCoalesce && ( fLastSectionWasEntityReference ||
|
||||
fLastSectionWasCData || fLastSectionWasCharacterData)){
|
||||
//fLastSectionWasEntityReference or fLastSectionWasCData are only
|
||||
//used when fIsCoalesce is set to true.
|
||||
fLastSectionWasEntityReference = true ;
|
||||
|
@ -968,9 +968,11 @@ public class XMLDocumentScannerImpl
|
||||
case SCANNER_STATE_CONTENT: {
|
||||
reportFatalError("ContentIllegalInProlog", null);
|
||||
fEntityScanner.scanChar(null);
|
||||
return -1;
|
||||
}
|
||||
case SCANNER_STATE_REFERENCE: {
|
||||
reportFatalError("ReferenceIllegalInProlog", null);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -217,7 +217,8 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
|
||||
/** Property defaults. */
|
||||
@ -232,7 +233,8 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
null,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT
|
||||
};
|
||||
|
||||
private static final String XMLEntity = "[xml]".intern();
|
||||
|
@ -1350,13 +1350,15 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
* @param delimiter The string that signifies the end of the character
|
||||
* data to be scanned.
|
||||
* @param buffer The XMLStringBuffer to fill.
|
||||
* @param chunkLimit the size limit of the data to be scanned. Zero by default
|
||||
* indicating no limit.
|
||||
*
|
||||
* @return Returns true if there is more data to scan, false otherwise.
|
||||
*
|
||||
* @throws IOException Thrown if i/o error occurs.
|
||||
* @throws EOFException Thrown on end of file.
|
||||
*/
|
||||
protected boolean scanData(String delimiter, XMLStringBuffer buffer)
|
||||
protected boolean scanData(String delimiter, XMLStringBuffer buffer, int chunkLimit)
|
||||
throws IOException {
|
||||
|
||||
boolean done = false;
|
||||
@ -1505,6 +1507,10 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
buffer.append(fCurrentEntity.ch, offset, length);
|
||||
return true;
|
||||
}
|
||||
if (chunkLimit > 0 &&
|
||||
(buffer.length + fCurrentEntity.position - offset) >= chunkLimit) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
int length = fCurrentEntity.position - offset;
|
||||
fCurrentEntity.columnNumber += length - newlines;
|
||||
@ -1520,7 +1526,10 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
print();
|
||||
System.out.println(" -> " + done);
|
||||
}
|
||||
} while (!done);
|
||||
if (chunkLimit > 0 && buffer.length >= chunkLimit) {
|
||||
break;
|
||||
}
|
||||
} while (!done && chunkLimit == 0);
|
||||
return !done;
|
||||
|
||||
} // scanData(String, XMLStringBuffer)
|
||||
|
@ -760,7 +760,7 @@ public abstract class XMLScanner
|
||||
// since scanData appends the parsed data to the buffer passed
|
||||
// a while loop would append the whole of parsed data to the buffer(data:XMLStringBuffer)
|
||||
//until all of the data is buffered.
|
||||
if (fEntityScanner.scanData("?>", data)) {
|
||||
if (fEntityScanner.scanData("?>", data, 0)) {
|
||||
do {
|
||||
int c = fEntityScanner.peekChar();
|
||||
if (c != -1) {
|
||||
@ -772,7 +772,7 @@ public abstract class XMLScanner
|
||||
fEntityScanner.scanChar(null);
|
||||
}
|
||||
}
|
||||
} while (fEntityScanner.scanData("?>", data));
|
||||
} while (fEntityScanner.scanData("?>", data, 0));
|
||||
}
|
||||
|
||||
} // scanPIData(String,XMLString)
|
||||
@ -797,7 +797,7 @@ public abstract class XMLScanner
|
||||
// text
|
||||
// REVISIT: handle invalid character, eof
|
||||
text.clear();
|
||||
while (fEntityScanner.scanData("--", text)) {
|
||||
while (fEntityScanner.scanData("--", text, 0)) {
|
||||
int c = fEntityScanner.peekChar();
|
||||
|
||||
//System.out.println( "XMLScanner#scanComment#text.toString() == " + text.toString() );
|
||||
|
@ -250,7 +250,8 @@ XSLoader, DOMConfiguration {
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
|
||||
// Data
|
||||
@ -282,7 +283,7 @@ XSLoader, DOMConfiguration {
|
||||
private XSDDescription fXSDDescription = new XSDDescription();
|
||||
private String faccessExternalSchema = Constants.EXTERNAL_ACCESS_DEFAULT;
|
||||
|
||||
private WeakHashMap fJAXPCache;
|
||||
private WeakHashMap<Object, SchemaGrammar> fJAXPCache;
|
||||
private Locale fLocale = Locale.getDefault();
|
||||
|
||||
// XSLoader attributes
|
||||
@ -366,7 +367,7 @@ XSLoader, DOMConfiguration {
|
||||
}
|
||||
fCMBuilder = builder;
|
||||
fSchemaHandler = new XSDHandler(fGrammarBucket);
|
||||
fJAXPCache = new WeakHashMap();
|
||||
fJAXPCache = new WeakHashMap<>();
|
||||
|
||||
fSettingsChanged = true;
|
||||
}
|
||||
@ -377,7 +378,7 @@ XSLoader, DOMConfiguration {
|
||||
* are recognized.
|
||||
*/
|
||||
public String[] getRecognizedFeatures() {
|
||||
return (String[])(RECOGNIZED_FEATURES.clone());
|
||||
return RECOGNIZED_FEATURES.clone();
|
||||
} // getRecognizedFeatures(): String[]
|
||||
|
||||
/**
|
||||
@ -419,7 +420,7 @@ XSLoader, DOMConfiguration {
|
||||
* are recognized.
|
||||
*/
|
||||
public String[] getRecognizedProperties() {
|
||||
return (String[])(RECOGNIZED_PROPERTIES.clone());
|
||||
return RECOGNIZED_PROPERTIES.clone();
|
||||
} // getRecognizedProperties(): String[]
|
||||
|
||||
/**
|
||||
@ -568,7 +569,7 @@ XSLoader, DOMConfiguration {
|
||||
desc.setBaseSystemId(source.getBaseSystemId());
|
||||
desc.setLiteralSystemId( source.getSystemId());
|
||||
// none of the other fields make sense for preparsing
|
||||
Map locationPairs = new HashMap();
|
||||
Map<String, LocationArray> locationPairs = new HashMap<>();
|
||||
// Process external schema location properties.
|
||||
// We don't call tokenizeSchemaLocationStr here, because we also want
|
||||
// to check whether the values are valid URI.
|
||||
@ -665,7 +666,7 @@ XSLoader, DOMConfiguration {
|
||||
|
||||
// add external schema locations to the location pairs
|
||||
public static void processExternalHints(String sl, String nsl,
|
||||
Map<String, XMLSchemaLoader.LocationArray> locations,
|
||||
Map<String, LocationArray> locations,
|
||||
XMLErrorReporter er) {
|
||||
if (sl != null) {
|
||||
try {
|
||||
@ -694,9 +695,10 @@ XSLoader, DOMConfiguration {
|
||||
if (nsl != null) {
|
||||
try {
|
||||
// similarly for no ns schema location property
|
||||
XSAttributeDecl attrDecl = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION);
|
||||
XSAttributeDecl attrDecl = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(
|
||||
SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION);
|
||||
attrDecl.fType.validate(nsl, null, null);
|
||||
LocationArray la = ((LocationArray)locations.get(XMLSymbols.EMPTY_STRING));
|
||||
LocationArray la = locations.get(XMLSymbols.EMPTY_STRING);
|
||||
if(la == null) {
|
||||
la = new LocationArray();
|
||||
locations.put(XMLSymbols.EMPTY_STRING, la);
|
||||
@ -763,14 +765,14 @@ XSLoader, DOMConfiguration {
|
||||
return;
|
||||
}
|
||||
|
||||
Class componentType = fJAXPSource.getClass().getComponentType();
|
||||
Class<?> componentType = fJAXPSource.getClass().getComponentType();
|
||||
XMLInputSource xis = null;
|
||||
String sid = null;
|
||||
if (componentType == null) {
|
||||
// Not an array
|
||||
if (fJAXPSource instanceof InputStream ||
|
||||
fJAXPSource instanceof InputSource) {
|
||||
SchemaGrammar g = (SchemaGrammar)fJAXPCache.get(fJAXPSource);
|
||||
SchemaGrammar g = fJAXPCache.get(fJAXPSource);
|
||||
if (g != null) {
|
||||
fGrammarBucket.putGrammar(g);
|
||||
return;
|
||||
@ -823,7 +825,7 @@ XSLoader, DOMConfiguration {
|
||||
for (int i = 0; i < objArr.length; i++) {
|
||||
if (objArr[i] instanceof InputStream ||
|
||||
objArr[i] instanceof InputSource) {
|
||||
SchemaGrammar g = (SchemaGrammar)fJAXPCache.get(objArr[i]);
|
||||
SchemaGrammar g = fJAXPCache.get(objArr[i]);
|
||||
if (g != null) {
|
||||
fGrammarBucket.putGrammar(g);
|
||||
continue;
|
||||
|
@ -344,13 +344,14 @@ public class XMLSchemaValidator
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
|
||||
/** Property defaults. */
|
||||
private static final Object[] PROPERTY_DEFAULTS =
|
||||
{ null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null};
|
||||
null, null, null, null, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT };
|
||||
|
||||
// this is the number of valuestores of each kind
|
||||
// we expect an element to have. It's almost
|
||||
@ -358,10 +359,14 @@ public class XMLSchemaValidator
|
||||
protected static final int ID_CONSTRAINT_NUM = 1;
|
||||
|
||||
// xsi:* attribute declarations
|
||||
static final XSAttributeDecl XSI_TYPE = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_TYPE);
|
||||
static final XSAttributeDecl XSI_NIL = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_NIL);
|
||||
static final XSAttributeDecl XSI_SCHEMALOCATION = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_SCHEMALOCATION);
|
||||
static final XSAttributeDecl XSI_NONAMESPACESCHEMALOCATION = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION);
|
||||
static final XSAttributeDecl XSI_TYPE =
|
||||
SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_TYPE);
|
||||
static final XSAttributeDecl XSI_NIL =
|
||||
SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_NIL);
|
||||
static final XSAttributeDecl XSI_SCHEMALOCATION =
|
||||
SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_SCHEMALOCATION);
|
||||
static final XSAttributeDecl XSI_NONAMESPACESCHEMALOCATION =
|
||||
SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION);
|
||||
|
||||
//
|
||||
// Data
|
||||
|
@ -336,7 +336,8 @@ public class SchemaParsingConfig extends BasicParserConfiguration
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
addRecognizedProperties(recognizedProperties);
|
||||
|
||||
@ -368,6 +369,7 @@ public class SchemaParsingConfig extends BasicParserConfiguration
|
||||
|
||||
fValidationManager = new ValidationManager();
|
||||
fProperties.put(VALIDATION_MANAGER, fValidationManager);
|
||||
fProperties.put(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
|
||||
fVersionDetector = new XMLVersionDetector();
|
||||
|
||||
|
@ -350,7 +350,7 @@ public class XSDHandler {
|
||||
|
||||
// This map's job is to act as a link between the Schema Element and its
|
||||
// XSDocumentInfo object.
|
||||
private Map fDoc2XSDocumentMap = new HashMap();
|
||||
private Map<Element, XSDocumentInfo> fDoc2XSDocumentMap = new HashMap<>();
|
||||
|
||||
// map between <redefine> elements and the XSDocumentInfo
|
||||
// objects that correspond to the documents being redefined.
|
||||
@ -1104,10 +1104,12 @@ public class XSDHandler {
|
||||
fSchemaGrammarDescription.setTargetNamespace(callerTNS);
|
||||
|
||||
boolean alreadyTraversed = false;
|
||||
XMLInputSource schemaSource = resolveSchemaSource(fSchemaGrammarDescription, mustResolve, child, true);
|
||||
XMLInputSource schemaSource =
|
||||
resolveSchemaSource(fSchemaGrammarDescription, mustResolve, child, true);
|
||||
if (fNamespaceGrowth && refType == XSDDescription.CONTEXT_INCLUDE) {
|
||||
try {
|
||||
final String schemaId = XMLEntityManager.expandSystemId(schemaSource.getSystemId(), schemaSource.getBaseSystemId(), false);
|
||||
final String schemaId = XMLEntityManager.expandSystemId(
|
||||
schemaSource.getSystemId(), schemaSource.getBaseSystemId(), false);
|
||||
alreadyTraversed = sg.getDocumentLocations().contains(schemaId);
|
||||
}
|
||||
catch(MalformedURIException e) {
|
||||
@ -1133,10 +1135,11 @@ public class XSDHandler {
|
||||
// To handle mutual <include>s
|
||||
XSDocumentInfo newSchemaInfo = null;
|
||||
if (fLastSchemaWasDuplicate) {
|
||||
newSchemaInfo = newSchemaRoot == null ? null : (XSDocumentInfo)fDoc2XSDocumentMap.get(newSchemaRoot);
|
||||
newSchemaInfo = newSchemaRoot == null ? null : fDoc2XSDocumentMap.get(newSchemaRoot);
|
||||
}
|
||||
else {
|
||||
newSchemaInfo = constructTrees(newSchemaRoot, schemaHint, fSchemaGrammarDescription, importCollision);
|
||||
newSchemaInfo = constructTrees(newSchemaRoot, schemaHint,
|
||||
fSchemaGrammarDescription, importCollision);
|
||||
}
|
||||
|
||||
if (localName.equals(SchemaSymbols.ELT_REDEFINE) &&
|
||||
@ -3552,9 +3555,11 @@ public class XSDHandler {
|
||||
// than checking its value. Don't set the ERROR_HANDLER
|
||||
// or LOCALE properties unless they've actually changed.
|
||||
if (fErrorHandler != fSchemaParser.getProperty(ERROR_HANDLER)) {
|
||||
fSchemaParser.setProperty(ERROR_HANDLER, (fErrorHandler != null) ? fErrorHandler : new DefaultErrorHandler());
|
||||
fSchemaParser.setProperty(ERROR_HANDLER,
|
||||
(fErrorHandler != null) ? fErrorHandler : new DefaultErrorHandler());
|
||||
if (fAnnotationValidator != null) {
|
||||
fAnnotationValidator.setProperty(ERROR_HANDLER, (fErrorHandler != null) ? fErrorHandler : new DefaultErrorHandler());
|
||||
fAnnotationValidator.setProperty(ERROR_HANDLER,
|
||||
(fErrorHandler != null) ? fErrorHandler : new DefaultErrorHandler());
|
||||
}
|
||||
}
|
||||
if (fLocale != fSchemaParser.getProperty(LOCALE)) {
|
||||
@ -3567,7 +3572,8 @@ public class XSDHandler {
|
||||
catch (XMLConfigurationException e) {}
|
||||
|
||||
try {
|
||||
fSchemaParser.setFeature(CONTINUE_AFTER_FATAL_ERROR, fErrorReporter.getFeature(CONTINUE_AFTER_FATAL_ERROR));
|
||||
fSchemaParser.setFeature(CONTINUE_AFTER_FATAL_ERROR,
|
||||
fErrorReporter.getFeature(CONTINUE_AFTER_FATAL_ERROR));
|
||||
} catch (XMLConfigurationException e) {}
|
||||
|
||||
try {
|
||||
@ -3601,13 +3607,16 @@ public class XSDHandler {
|
||||
}
|
||||
} catch (XMLConfigurationException e) {}
|
||||
|
||||
fSecurityPropertyMgr = (XMLSecurityPropertyManager) componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
|
||||
fSecurityPropertyMgr = (XMLSecurityPropertyManager)
|
||||
componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
|
||||
|
||||
//Passing on the setting to the parser
|
||||
fSchemaParser.setProperty(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr);
|
||||
|
||||
fAccessExternalDTD = fSecurityPropertyMgr.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
|
||||
fAccessExternalSchema = fSecurityPropertyMgr.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
|
||||
fAccessExternalDTD = fSecurityPropertyMgr.getValue(
|
||||
XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
|
||||
fAccessExternalSchema = fSecurityPropertyMgr.getValue(
|
||||
XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
|
||||
|
||||
// Passing the Catalog settings to the parser
|
||||
fUseCatalog = componentManager.getFeature(XMLConstants.USE_CATALOG);
|
||||
@ -3620,9 +3629,16 @@ public class XSDHandler {
|
||||
fResolve = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_RESOLVE);
|
||||
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
fSchemaParser.setProperty(f.getPropertyName(), componentManager.getProperty(f.getPropertyName()));
|
||||
fEntityManager.setProperty(f.getPropertyName(), componentManager.getProperty(f.getPropertyName()));
|
||||
fSchemaParser.setProperty(f.getPropertyName(),
|
||||
componentManager.getProperty(f.getPropertyName()));
|
||||
fEntityManager.setProperty(f.getPropertyName(),
|
||||
componentManager.getProperty(f.getPropertyName()));
|
||||
}
|
||||
|
||||
fSchemaParser.setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
componentManager.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE));
|
||||
fEntityManager.setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
componentManager.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE));
|
||||
} // reset(XMLComponentManager)
|
||||
|
||||
|
||||
@ -3635,11 +3651,10 @@ public class XSDHandler {
|
||||
|
||||
for (int i = 0; i < fLocalElemStackPos; i++) {
|
||||
Element currElem = fLocalElementDecl[i];
|
||||
//XSDocumentInfo currSchema = (XSDocumentInfo)fDoc2XSDocumentMap.get(DOMUtil.getDocument(currElem));
|
||||
//XSDocumentInfo currSchema = (XSDocumentInfo)fDoc2XSDocumentMap.get(DOMUtil.getRoot(DOMUtil.getDocument(currElem)));
|
||||
XSDocumentInfo currSchema = fLocalElementDecl_schema[i];
|
||||
SchemaGrammar currGrammar = fGrammarBucket.getGrammar(currSchema.fTargetNamespace);
|
||||
fElementTraverser.traverseLocal (fParticle[i], currElem, currSchema, currGrammar, fAllContext[i], fParent[i], fLocalElemNamespaceContext[i]);
|
||||
fElementTraverser.traverseLocal (fParticle[i], currElem, currSchema,
|
||||
currGrammar, fAllContext[i], fParent[i], fLocalElemNamespaceContext[i]);
|
||||
// If it's an empty particle, remove it from the containing component.
|
||||
if (fParticle[i].fType == XSParticleDecl.PARTICLE_EMPTY) {
|
||||
XSModelGroupImpl group = null;
|
||||
@ -4065,7 +4080,8 @@ public class XSDHandler {
|
||||
Element decl, XSDocumentInfo decl_Doc) {
|
||||
|
||||
if (DEBUG_NODE_POOL) {
|
||||
System.out.println("DOCUMENT NS:"+ currSchema.fTargetNamespace+" hashcode:"+ ((Object)currSchema.fSchemaElement).hashCode());
|
||||
System.out.println("DOCUMENT NS:" + currSchema.fTargetNamespace + " hashcode:" +
|
||||
((Object)currSchema.fSchemaElement).hashCode());
|
||||
}
|
||||
Object temp = decl_Doc;
|
||||
if (temp == null) {
|
||||
@ -4091,7 +4107,8 @@ public class XSDHandler {
|
||||
|
||||
// returns whether more than <annotation>s occur in children of elem
|
||||
private boolean nonAnnotationContent(Element elem) {
|
||||
for(Element child = DOMUtil.getFirstChildElement(elem); child != null; child = DOMUtil.getNextSiblingElement(child)) {
|
||||
for(Element child = DOMUtil.getFirstChildElement(elem); child != null;
|
||||
child = DOMUtil.getNextSiblingElement(child)) {
|
||||
if(!(DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION))) return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 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.
|
||||
@ -17,7 +17,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xerces.internal.jaxp.validation;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.Constants;
|
||||
@ -47,7 +46,8 @@ import jdk.xml.internal.JdkXmlUtils;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* <p>A validator helper for <code>StreamSource</code>s.</p>
|
||||
* <p>
|
||||
* A validator helper for <code>StreamSource</code>s.</p>
|
||||
*
|
||||
* @author Michael Glavassevich, IBM
|
||||
* @author <a href="mailto:Sunitha.Reddy@Sun.com">Sunitha Reddy</a>
|
||||
@ -55,74 +55,98 @@ import org.xml.sax.SAXException;
|
||||
final class StreamValidatorHelper implements ValidatorHelper {
|
||||
|
||||
// feature identifiers
|
||||
|
||||
/** Feature identifier: parser settings. */
|
||||
private static final String PARSER_SETTINGS =
|
||||
Constants.XERCES_FEATURE_PREFIX + Constants.PARSER_SETTINGS;
|
||||
/**
|
||||
* Feature identifier: parser settings.
|
||||
*/
|
||||
private static final String PARSER_SETTINGS
|
||||
= Constants.XERCES_FEATURE_PREFIX + Constants.PARSER_SETTINGS;
|
||||
|
||||
// property identifiers
|
||||
/**
|
||||
* Property identifier: entity resolver.
|
||||
*/
|
||||
private static final String ENTITY_RESOLVER
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;
|
||||
|
||||
/** Property identifier: entity resolver. */
|
||||
private static final String ENTITY_RESOLVER =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;
|
||||
/**
|
||||
* Property identifier: error handler.
|
||||
*/
|
||||
private static final String ERROR_HANDLER
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;
|
||||
|
||||
/** Property identifier: error handler. */
|
||||
private static final String ERROR_HANDLER =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;
|
||||
/**
|
||||
* Property identifier: error reporter.
|
||||
*/
|
||||
private static final String ERROR_REPORTER
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
|
||||
|
||||
/** Property identifier: error reporter. */
|
||||
private static final String ERROR_REPORTER =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
|
||||
/**
|
||||
* Property identifier: XML Schema validator.
|
||||
*/
|
||||
private static final String SCHEMA_VALIDATOR
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_VALIDATOR_PROPERTY;
|
||||
|
||||
/** Property identifier: XML Schema validator. */
|
||||
private static final String SCHEMA_VALIDATOR =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_VALIDATOR_PROPERTY;
|
||||
/**
|
||||
* Property identifier: symbol table.
|
||||
*/
|
||||
private static final String SYMBOL_TABLE
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;
|
||||
|
||||
/** Property identifier: symbol table. */
|
||||
private static final String SYMBOL_TABLE =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;
|
||||
/**
|
||||
* Property identifier: validation manager.
|
||||
*/
|
||||
private static final String VALIDATION_MANAGER
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.VALIDATION_MANAGER_PROPERTY;
|
||||
|
||||
/** Property identifier: validation manager. */
|
||||
private static final String VALIDATION_MANAGER =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.VALIDATION_MANAGER_PROPERTY;
|
||||
private static final String DEFAULT_TRANSFORMER_IMPL
|
||||
= "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
|
||||
|
||||
private static final String DEFAULT_TRANSFORMER_IMPL = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
|
||||
|
||||
/** Property id: security manager. */
|
||||
private static final String SECURITY_MANAGER =
|
||||
Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY;
|
||||
/**
|
||||
* Property id: security manager.
|
||||
*/
|
||||
private static final String SECURITY_MANAGER
|
||||
= Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY;
|
||||
|
||||
//
|
||||
// Data
|
||||
//
|
||||
/**
|
||||
* SoftReference to parser configuration. *
|
||||
*/
|
||||
private SoftReference<XMLParserConfiguration> fConfiguration = new SoftReference<>(null);
|
||||
|
||||
/** SoftReference to parser configuration. **/
|
||||
private SoftReference fConfiguration = new SoftReference(null);
|
||||
|
||||
/** Schema validator. **/
|
||||
/**
|
||||
* Schema validator. *
|
||||
*/
|
||||
private com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator fSchemaValidator;
|
||||
|
||||
/** Component manager. **/
|
||||
/**
|
||||
* Component manager. *
|
||||
*/
|
||||
private XMLSchemaValidatorComponentManager fComponentManager;
|
||||
|
||||
private ValidatorHandlerImpl handler = null;
|
||||
|
||||
public StreamValidatorHelper(XMLSchemaValidatorComponentManager componentManager) {
|
||||
fComponentManager = componentManager;
|
||||
fSchemaValidator = (com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator) fComponentManager.getProperty(SCHEMA_VALIDATOR);
|
||||
fSchemaValidator = (com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator)
|
||||
fComponentManager.getProperty(SCHEMA_VALIDATOR);
|
||||
}
|
||||
|
||||
public void validate(Source source, Result result)
|
||||
throws SAXException, IOException {
|
||||
throws SAXException, IOException {
|
||||
if (result == null || result instanceof StreamResult) {
|
||||
final StreamSource streamSource = (StreamSource) source;
|
||||
TransformerHandler identityTransformerHandler ;
|
||||
TransformerHandler identityTransformerHandler;
|
||||
|
||||
if( result!=null ) {
|
||||
if (result != null) {
|
||||
try {
|
||||
SAXTransformerFactory tf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ?
|
||||
(SAXTransformerFactory)SAXTransformerFactory.newInstance()
|
||||
: (SAXTransformerFactory) TransformerFactory.newInstance(DEFAULT_TRANSFORMER_IMPL, StreamValidatorHelper.class.getClassLoader());
|
||||
SAXTransformerFactory tf = fComponentManager.getFeature(
|
||||
Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ?
|
||||
(SAXTransformerFactory) SAXTransformerFactory.newInstance() :
|
||||
(SAXTransformerFactory) TransformerFactory.newInstance(
|
||||
DEFAULT_TRANSFORMER_IMPL,
|
||||
StreamValidatorHelper.class.getClassLoader());
|
||||
identityTransformerHandler = tf.newTransformerHandler();
|
||||
} catch (TransformerConfigurationException e) {
|
||||
throw new TransformerFactoryConfigurationError(e);
|
||||
@ -133,13 +157,14 @@ final class StreamValidatorHelper implements ValidatorHelper {
|
||||
identityTransformerHandler.setResult(result);
|
||||
}
|
||||
|
||||
XMLInputSource input = new XMLInputSource(streamSource.getPublicId(), streamSource.getSystemId(), null, false);
|
||||
XMLInputSource input = new XMLInputSource(streamSource.getPublicId(),
|
||||
streamSource.getSystemId(), null, false);
|
||||
input.setByteStream(streamSource.getInputStream());
|
||||
input.setCharacterStream(streamSource.getReader());
|
||||
|
||||
// Gets the parser configuration. We'll create and initialize a new one, if we
|
||||
// haven't created one before or if the previous one was garbage collected.
|
||||
XMLParserConfiguration config = (XMLParserConfiguration) fConfiguration.get();
|
||||
XMLParserConfiguration config = fConfiguration.get();
|
||||
if (config == null) {
|
||||
config = initialize();
|
||||
}
|
||||
@ -155,18 +180,17 @@ final class StreamValidatorHelper implements ValidatorHelper {
|
||||
|
||||
try {
|
||||
config.parse(input);
|
||||
}
|
||||
catch (XMLParseException e) {
|
||||
} catch (XMLParseException e) {
|
||||
throw Util.toSAXParseException(e);
|
||||
}
|
||||
catch (XNIException e) {
|
||||
} catch (XNIException e) {
|
||||
throw Util.toSAXException(e);
|
||||
}
|
||||
return;
|
||||
}
|
||||
throw new IllegalArgumentException(JAXPValidationMessageFormatter.formatMessage(fComponentManager.getLocale(),
|
||||
throw new IllegalArgumentException(JAXPValidationMessageFormatter.formatMessage(
|
||||
fComponentManager.getLocale(),
|
||||
"SourceResultMismatch",
|
||||
new Object [] {source.getClass().getName(), result.getClass().getName()}));
|
||||
new Object[]{source.getClass().getName(), result.getClass().getName()}));
|
||||
}
|
||||
|
||||
private XMLParserConfiguration initialize() {
|
||||
@ -197,7 +221,10 @@ final class StreamValidatorHelper implements ValidatorHelper {
|
||||
// Passing on the CatalogFeatures settings
|
||||
JdkXmlUtils.catalogFeaturesConfig2Config(fComponentManager, config);
|
||||
|
||||
fConfiguration = new SoftReference(config);
|
||||
config.setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
fComponentManager.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE));
|
||||
|
||||
fConfiguration = new SoftReference<>(config);
|
||||
return config;
|
||||
}
|
||||
|
||||
|
@ -165,6 +165,8 @@ public final class XMLSchemaFactory extends SchemaFactory {
|
||||
for (Feature f : Feature.values()) {
|
||||
fXMLSchemaLoader.setProperty(f.getPropertyName(), null);
|
||||
}
|
||||
|
||||
fXMLSchemaLoader.setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,6 +48,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLComponent;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
|
||||
import javax.xml.catalog.CatalogFeatures;
|
||||
import jdk.xml.internal.JdkXmlUtils;
|
||||
import org.w3c.dom.ls.LSResourceResolver;
|
||||
import org.xml.sax.ErrorHandler;
|
||||
|
||||
@ -311,6 +312,9 @@ final class XMLSchemaValidatorComponentManager extends ParserConfigurationSettin
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
setProperty(f.getPropertyName(), grammarContainer.getProperty(f.getPropertyName()));
|
||||
}
|
||||
|
||||
setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
grammarContainer.getProperty(JdkXmlUtils.CDATA_CHUNK_SIZE));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -345,7 +345,8 @@ public class DTDConfiguration
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
addRecognizedProperties(recognizedProperties);
|
||||
|
||||
@ -429,6 +430,8 @@ public class DTDConfiguration
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
setProperty(f.getPropertyName(), null);
|
||||
}
|
||||
|
||||
setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
} // <init>(SymbolTable,XMLGrammarPool)
|
||||
|
||||
//
|
||||
|
@ -328,7 +328,8 @@ public class NonValidatingConfiguration
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
addRecognizedProperties(recognizedProperties);
|
||||
|
||||
@ -391,6 +392,8 @@ public class NonValidatingConfiguration
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
setProperty(f.getPropertyName(), null);
|
||||
}
|
||||
|
||||
setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
} // <init>(SymbolTable,XMLGrammarPool)
|
||||
|
||||
//
|
||||
|
@ -561,7 +561,8 @@ public class XML11Configuration extends ParserConfigurationSettings
|
||||
JdkXmlUtils.CATALOG_DEFER,
|
||||
JdkXmlUtils.CATALOG_FILES,
|
||||
JdkXmlUtils.CATALOG_PREFER,
|
||||
JdkXmlUtils.CATALOG_RESOLVE
|
||||
JdkXmlUtils.CATALOG_RESOLVE,
|
||||
JdkXmlUtils.CDATA_CHUNK_SIZE
|
||||
};
|
||||
addRecognizedProperties(recognizedProperties);
|
||||
|
||||
@ -629,6 +630,8 @@ public class XML11Configuration extends ParserConfigurationSettings
|
||||
fProperties.put(f.getPropertyName(), null);
|
||||
}
|
||||
|
||||
setProperty(JdkXmlUtils.CDATA_CHUNK_SIZE, JdkXmlUtils.CDATA_CHUNK_SIZE_DEFAULT);
|
||||
|
||||
fConfigUpdated = false;
|
||||
} // <init>(SymbolTable,XMLGrammarPool)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
@ -17,9 +17,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
* $Id: EmptySerializer.java,v 1.2.4.1 2005/09/15 08:15:16 suresh_emailid Exp $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.serializer;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -48,235 +46,224 @@ import org.xml.sax.SAXParseException;
|
||||
public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
protected static final String ERR = "EmptySerializer method not over-ridden";
|
||||
/**
|
||||
* @see SerializationHandler#asContentHandler()
|
||||
*/
|
||||
|
||||
protected void couldThrowIOException() throws IOException
|
||||
protected void couldThrowIOException() throws IOException {
|
||||
return; // don't do anything.
|
||||
}
|
||||
|
||||
protected void couldThrowSAXException() throws SAXException {
|
||||
return; // don't do anything.
|
||||
}
|
||||
|
||||
protected void couldThrowSAXException(char[] chars, int off, int len)
|
||||
throws SAXException
|
||||
{
|
||||
return; // don't do anything.
|
||||
}
|
||||
|
||||
protected void couldThrowSAXException() throws SAXException
|
||||
protected void couldThrowSAXException(String elemQName)
|
||||
throws SAXException
|
||||
{
|
||||
return; // don't do anything.
|
||||
}
|
||||
|
||||
protected void couldThrowSAXException(char[] chars, int off, int len) throws SAXException
|
||||
{
|
||||
return; // don't do anything.
|
||||
}
|
||||
|
||||
protected void couldThrowSAXException(String elemQName) throws SAXException
|
||||
{
|
||||
return; // don't do anything.
|
||||
}
|
||||
|
||||
void aMethodIsCalled()
|
||||
{
|
||||
|
||||
void aMethodIsCalled() {
|
||||
// throw new RuntimeException(err);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#asContentHandler()
|
||||
*/
|
||||
public ContentHandler asContentHandler() throws IOException
|
||||
{
|
||||
public ContentHandler asContentHandler() throws IOException {
|
||||
couldThrowIOException();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setContentHandler(org.xml.sax.ContentHandler)
|
||||
*/
|
||||
public void setContentHandler(ContentHandler ch)
|
||||
{
|
||||
public void setContentHandler(ContentHandler ch) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#close()
|
||||
*/
|
||||
public void close()
|
||||
{
|
||||
public void close() {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#getOutputFormat()
|
||||
*/
|
||||
public Properties getOutputFormat()
|
||||
{
|
||||
public Properties getOutputFormat() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#getOutputStream()
|
||||
*/
|
||||
public OutputStream getOutputStream()
|
||||
{
|
||||
public OutputStream getOutputStream() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#getWriter()
|
||||
*/
|
||||
public Writer getWriter()
|
||||
{
|
||||
public Writer getWriter() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#reset()
|
||||
*/
|
||||
public boolean reset()
|
||||
{
|
||||
public boolean reset() {
|
||||
aMethodIsCalled();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#serialize(org.w3c.dom.Node)
|
||||
*/
|
||||
public void serialize(Node node) throws IOException
|
||||
{
|
||||
public void serialize(Node node) throws IOException {
|
||||
couldThrowIOException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setCdataSectionElements(java.util.ArrayList<String>)
|
||||
*/
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
|
||||
{
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setEscaping(boolean)
|
||||
*/
|
||||
public boolean setEscaping(boolean escape) throws SAXException
|
||||
{
|
||||
public boolean setEscaping(boolean escape) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setIndent(boolean)
|
||||
*/
|
||||
public void setIndent(boolean indent)
|
||||
{
|
||||
public void setIndent(boolean indent) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setIndentAmount(int)
|
||||
*/
|
||||
public void setIndentAmount(int spaces)
|
||||
{
|
||||
public void setIndentAmount(int spaces) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setIsStandalone(boolean)
|
||||
*/
|
||||
public void setIsStandalone(boolean isStandalone)
|
||||
{
|
||||
public void setIsStandalone(boolean isStandalone) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setOutputFormat(java.util.Properties)
|
||||
*/
|
||||
public void setOutputFormat(Properties format)
|
||||
{
|
||||
public void setOutputFormat(Properties format) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setOutputStream(java.io.OutputStream)
|
||||
*/
|
||||
public void setOutputStream(OutputStream output)
|
||||
{
|
||||
public void setOutputStream(OutputStream output) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setVersion(java.lang.String)
|
||||
*/
|
||||
public void setVersion(String version)
|
||||
{
|
||||
public void setVersion(String version) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setWriter(java.io.Writer)
|
||||
*/
|
||||
public void setWriter(Writer writer)
|
||||
{
|
||||
public void setWriter(Writer writer) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setTransformer(javax.xml.transform.Transformer)
|
||||
*/
|
||||
public void setTransformer(Transformer transformer)
|
||||
{
|
||||
public void setTransformer(Transformer transformer) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#getTransformer()
|
||||
*/
|
||||
public Transformer getTransformer()
|
||||
{
|
||||
public Transformer getTransformer() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#flushPending()
|
||||
*/
|
||||
public void flushPending() throws SAXException
|
||||
{
|
||||
public void flushPending() throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void addAttribute(
|
||||
String uri,
|
||||
String localName,
|
||||
String rawName,
|
||||
String type,
|
||||
String value,
|
||||
boolean XSLAttribute)
|
||||
public void addAttribute(String uri, String localName, String rawName,
|
||||
String type, String value, boolean XSLAttribute)
|
||||
throws SAXException
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#addAttributes(org.xml.sax.Attributes)
|
||||
*/
|
||||
public void addAttributes(Attributes atts) throws SAXException
|
||||
{
|
||||
public void addAttributes(Attributes atts) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void addAttribute(String name, String value)
|
||||
{
|
||||
public void addAttribute(String name, String value) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#characters(java.lang.String)
|
||||
*/
|
||||
public void characters(String chars) throws SAXException
|
||||
{
|
||||
public void characters(String chars) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#endElement(java.lang.String)
|
||||
*/
|
||||
public void endElement(String elemName) throws SAXException
|
||||
{
|
||||
public void endElement(String elemName) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#startDocument()
|
||||
*/
|
||||
public void startDocument() throws SAXException
|
||||
{
|
||||
public void startDocument() throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -285,13 +272,14 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException(qName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#startElement(java.lang.String)
|
||||
*/
|
||||
public void startElement(String qName) throws SAXException
|
||||
{
|
||||
public void startElement(String qName) throws SAXException {
|
||||
couldThrowSAXException(qName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#namespaceAfterStartElement(java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -303,68 +291,67 @@ public class EmptySerializer implements SerializationHandler
|
||||
/**
|
||||
* @see ExtendedContentHandler#startPrefixMapping(java.lang.String, java.lang.String, boolean)
|
||||
*/
|
||||
public boolean startPrefixMapping(
|
||||
String prefix,
|
||||
String uri,
|
||||
boolean shouldFlush)
|
||||
public boolean startPrefixMapping(String prefix, String uri,
|
||||
boolean shouldFlush)
|
||||
throws SAXException
|
||||
{
|
||||
couldThrowSAXException();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#entityReference(java.lang.String)
|
||||
*/
|
||||
public void entityReference(String entityName) throws SAXException
|
||||
{
|
||||
public void entityReference(String entityName) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#getNamespaceMappings()
|
||||
*/
|
||||
public NamespaceMappings getNamespaceMappings()
|
||||
{
|
||||
public NamespaceMappings getNamespaceMappings() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#getPrefix(java.lang.String)
|
||||
*/
|
||||
public String getPrefix(String uri)
|
||||
{
|
||||
public String getPrefix(String uri) {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#getNamespaceURI(java.lang.String, boolean)
|
||||
*/
|
||||
public String getNamespaceURI(String name, boolean isElement)
|
||||
{
|
||||
public String getNamespaceURI(String name, boolean isElement) {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#getNamespaceURIFromPrefix(java.lang.String)
|
||||
*/
|
||||
public String getNamespaceURIFromPrefix(String prefix)
|
||||
{
|
||||
public String getNamespaceURIFromPrefix(String prefix) {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
|
||||
*/
|
||||
public void setDocumentLocator(Locator arg0)
|
||||
{
|
||||
public void setDocumentLocator(Locator arg0) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#endDocument()
|
||||
*/
|
||||
public void endDocument() throws SAXException
|
||||
{
|
||||
public void endDocument() throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -373,25 +360,24 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
|
||||
*/
|
||||
public void endPrefixMapping(String arg0) throws SAXException
|
||||
{
|
||||
public void endPrefixMapping(String arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
|
||||
*/
|
||||
public void startElement(
|
||||
String arg0,
|
||||
String arg1,
|
||||
String arg2,
|
||||
Attributes arg3)
|
||||
public void startElement(String arg0, String arg1, String arg2,
|
||||
Attributes arg3)
|
||||
throws SAXException
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -400,13 +386,14 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
|
||||
*/
|
||||
public void characters(char[] arg0, int arg1, int arg2) throws SAXException
|
||||
{
|
||||
public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
|
||||
couldThrowSAXException(arg0, arg1, arg2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
|
||||
*/
|
||||
@ -415,6 +402,7 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -423,20 +411,21 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
|
||||
*/
|
||||
public void skippedEntity(String arg0) throws SAXException
|
||||
{
|
||||
public void skippedEntity(String arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedLexicalHandler#comment(java.lang.String)
|
||||
*/
|
||||
public void comment(String comment) throws SAXException
|
||||
{
|
||||
public void comment(String comment) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#startDTD(java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -445,189 +434,187 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#endDTD()
|
||||
*/
|
||||
public void endDTD() throws SAXException
|
||||
{
|
||||
public void endDTD() throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#startEntity(java.lang.String)
|
||||
*/
|
||||
public void startEntity(String arg0) throws SAXException
|
||||
{
|
||||
public void startEntity(String arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#endEntity(java.lang.String)
|
||||
*/
|
||||
public void endEntity(String arg0) throws SAXException
|
||||
{
|
||||
public void endEntity(String arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#startCDATA()
|
||||
*/
|
||||
public void startCDATA() throws SAXException
|
||||
{
|
||||
public void startCDATA() throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#endCDATA()
|
||||
*/
|
||||
public void endCDATA() throws SAXException
|
||||
{
|
||||
public void endCDATA() throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int)
|
||||
*/
|
||||
public void comment(char[] arg0, int arg1, int arg2) throws SAXException
|
||||
{
|
||||
public void comment(char[] arg0, int arg1, int arg2) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getDoctypePublic()
|
||||
*/
|
||||
public String getDoctypePublic()
|
||||
{
|
||||
public String getDoctypePublic() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getDoctypeSystem()
|
||||
*/
|
||||
public String getDoctypeSystem()
|
||||
{
|
||||
public String getDoctypeSystem() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getEncoding()
|
||||
*/
|
||||
public String getEncoding()
|
||||
{
|
||||
public String getEncoding() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getIndent()
|
||||
*/
|
||||
public boolean getIndent()
|
||||
{
|
||||
public boolean getIndent() {
|
||||
aMethodIsCalled();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getIndentAmount()
|
||||
*/
|
||||
public int getIndentAmount()
|
||||
{
|
||||
public int getIndentAmount() {
|
||||
aMethodIsCalled();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getMediaType()
|
||||
*/
|
||||
public String getMediaType()
|
||||
{
|
||||
public String getMediaType() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getOmitXMLDeclaration()
|
||||
*/
|
||||
public boolean getOmitXMLDeclaration()
|
||||
{
|
||||
public boolean getOmitXMLDeclaration() {
|
||||
aMethodIsCalled();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getStandalone()
|
||||
*/
|
||||
public String getStandalone()
|
||||
{
|
||||
public String getStandalone() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#getVersion()
|
||||
*/
|
||||
public String getVersion()
|
||||
{
|
||||
public String getVersion() {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setDoctype(java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void setDoctype(String system, String pub)
|
||||
{
|
||||
public void setDoctype(String system, String pub) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setDoctypePublic(java.lang.String)
|
||||
*/
|
||||
public void setDoctypePublic(String doctype)
|
||||
{
|
||||
public void setDoctypePublic(String doctype) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setDoctypeSystem(java.lang.String)
|
||||
*/
|
||||
public void setDoctypeSystem(String doctype)
|
||||
{
|
||||
public void setDoctypeSystem(String doctype) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setEncoding(java.lang.String)
|
||||
*/
|
||||
public void setEncoding(String encoding)
|
||||
{
|
||||
public void setEncoding(String encoding) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setMediaType(java.lang.String)
|
||||
*/
|
||||
public void setMediaType(String mediatype)
|
||||
{
|
||||
public void setMediaType(String mediatype) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setOmitXMLDeclaration(boolean)
|
||||
*/
|
||||
public void setOmitXMLDeclaration(boolean b)
|
||||
{
|
||||
public void setOmitXMLDeclaration(boolean b) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setStandalone(java.lang.String)
|
||||
*/
|
||||
public void setStandalone(String standalone)
|
||||
{
|
||||
public void setStandalone(String standalone) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.DeclHandler#elementDecl(java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void elementDecl(String arg0, String arg1) throws SAXException
|
||||
{
|
||||
public void elementDecl(String arg0, String arg1) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.DeclHandler#attributeDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void attributeDecl(
|
||||
String arg0,
|
||||
String arg1,
|
||||
String arg2,
|
||||
String arg3,
|
||||
String arg4)
|
||||
public void attributeDecl(String arg0, String arg1, String arg2,
|
||||
String arg3, String arg4)
|
||||
throws SAXException
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.DeclHandler#internalEntityDecl(java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -636,6 +623,7 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ext.DeclHandler#externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
@ -644,32 +632,32 @@ public class EmptySerializer implements SerializationHandler
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
|
||||
*/
|
||||
public void warning(SAXParseException arg0) throws SAXException
|
||||
{
|
||||
public void warning(SAXParseException arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
|
||||
*/
|
||||
public void error(SAXParseException arg0) throws SAXException
|
||||
{
|
||||
public void error(SAXParseException arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
|
||||
*/
|
||||
public void fatalError(SAXParseException arg0) throws SAXException
|
||||
{
|
||||
public void fatalError(SAXParseException arg0) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Serializer#asDOMSerializer()
|
||||
*/
|
||||
public DOMSerializer asDOMSerializer() throws IOException
|
||||
{
|
||||
public DOMSerializer asDOMSerializer() throws IOException {
|
||||
couldThrowIOException();
|
||||
return null;
|
||||
}
|
||||
@ -684,8 +672,7 @@ public class EmptySerializer implements SerializationHandler
|
||||
/**
|
||||
* @see ExtendedContentHandler#setSourceLocator(javax.xml.transform.SourceLocator)
|
||||
*/
|
||||
public void setSourceLocator(SourceLocator locator)
|
||||
{
|
||||
public void setSourceLocator(SourceLocator locator) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
@ -701,30 +688,30 @@ public class EmptySerializer implements SerializationHandler
|
||||
/**
|
||||
* @see ExtendedContentHandler#characters(org.w3c.dom.Node)
|
||||
*/
|
||||
public void characters(Node node) throws SAXException
|
||||
{
|
||||
public void characters(Node node) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#addXSLAttribute(java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void addXSLAttribute(String qName, String value, String uri)
|
||||
{
|
||||
public void addXSLAttribute(String qName, String value, String uri) {
|
||||
aMethodIsCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void addAttribute(String uri, String localName, String rawName, String type, String value) throws SAXException
|
||||
{
|
||||
public void addAttribute(String uri, String localName, String rawName,
|
||||
String type, String value) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.DTDHandler#notationDecl(java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void notationDecl(String arg0, String arg1, String arg2) throws SAXException
|
||||
public void notationDecl(String arg0, String arg1, String arg2)
|
||||
throws SAXException
|
||||
{
|
||||
couldThrowSAXException();
|
||||
}
|
||||
@ -732,12 +719,8 @@ public class EmptySerializer implements SerializationHandler
|
||||
/**
|
||||
* @see org.xml.sax.DTDHandler#unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void unparsedEntityDecl(
|
||||
String arg0,
|
||||
String arg1,
|
||||
String arg2,
|
||||
String arg3)
|
||||
throws SAXException {
|
||||
public void unparsedEntityDecl(String arg0, String arg1, String arg2,
|
||||
String arg3) throws SAXException {
|
||||
couldThrowSAXException();
|
||||
}
|
||||
|
||||
@ -746,10 +729,8 @@ public class EmptySerializer implements SerializationHandler
|
||||
*/
|
||||
public void setDTDEntityExpansion(boolean expand) {
|
||||
aMethodIsCalled();
|
||||
|
||||
}
|
||||
|
||||
|
||||
public String getOutputProperty(String name) {
|
||||
aMethodIsCalled();
|
||||
return null;
|
||||
@ -762,19 +743,16 @@ public class EmptySerializer implements SerializationHandler
|
||||
|
||||
public void setOutputProperty(String name, String val) {
|
||||
aMethodIsCalled();
|
||||
|
||||
}
|
||||
|
||||
public void setOutputPropertyDefault(String name, String val) {
|
||||
aMethodIsCalled();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.apache.xml.serializer.Serializer#asDOM3Serializer()
|
||||
*/
|
||||
public Object asDOM3Serializer() throws IOException
|
||||
{
|
||||
public Object asDOM3Serializer() throws IOException {
|
||||
couldThrowIOException();
|
||||
return null;
|
||||
}
|
||||
|
@ -1,15 +1,13 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
* Copyright (c) 2012, 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
|
||||
* 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
|
||||
*
|
||||
@ -19,22 +17,18 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
* $Id: SerializerBase.java,v 1.5 2006/04/14 12:09:19 sunithareddy Exp $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.serializer;
|
||||
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.SourceLocator;
|
||||
import javax.xml.transform.Transformer;
|
||||
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.Locator;
|
||||
@ -42,7 +36,6 @@ import org.xml.sax.SAXException;
|
||||
import org.xml.sax.SAXParseException;
|
||||
import org.xml.sax.ext.Locator2;
|
||||
|
||||
|
||||
/**
|
||||
* This class acts as a base class for the XML "serializers"
|
||||
* and the stream serializers.
|
||||
@ -54,7 +47,6 @@ public abstract class SerializerBase
|
||||
implements SerializationHandler, SerializerConstants
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* To fire off the end element trace event
|
||||
* @param name Name of element
|
||||
@ -62,8 +54,7 @@ public abstract class SerializerBase
|
||||
protected void fireEndElem(String name)
|
||||
throws org.xml.sax.SAXException
|
||||
{
|
||||
if (m_tracer != null)
|
||||
{
|
||||
if (m_tracer != null) {
|
||||
flushMyWriter();
|
||||
m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_ENDELEMENT,name, (Attributes)null);
|
||||
}
|
||||
@ -78,8 +69,7 @@ public abstract class SerializerBase
|
||||
protected void fireCharEvent(char[] chars, int start, int length)
|
||||
throws org.xml.sax.SAXException
|
||||
{
|
||||
if (m_tracer != null)
|
||||
{
|
||||
if (m_tracer != null) {
|
||||
flushMyWriter();
|
||||
m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CHARACTERS, chars, start,length);
|
||||
}
|
||||
@ -87,7 +77,7 @@ public abstract class SerializerBase
|
||||
|
||||
/**
|
||||
* true if we still need to call startDocumentInternal()
|
||||
*/
|
||||
*/
|
||||
protected boolean m_needToCallStartDocument = true;
|
||||
|
||||
/** True if a trailing "]]>" still needs to be written to be
|
||||
@ -150,6 +140,7 @@ public abstract class SerializerBase
|
||||
* Flag to tell if indenting (pretty-printing) is on.
|
||||
*/
|
||||
protected boolean m_doIndent = false;
|
||||
|
||||
/**
|
||||
* Amount to indent.
|
||||
*/
|
||||
@ -186,7 +177,6 @@ public abstract class SerializerBase
|
||||
|
||||
protected SourceLocator m_sourceLocator;
|
||||
|
||||
|
||||
/**
|
||||
* The writer to send output to. This field is only used in the ToStream
|
||||
* serializers, but exists here just so that the fireStartDoc() and
|
||||
@ -227,11 +217,9 @@ public abstract class SerializerBase
|
||||
*
|
||||
* @see ExtendedLexicalHandler#comment(String)
|
||||
*/
|
||||
public void comment(String data) throws SAXException
|
||||
{
|
||||
public void comment(String data) throws SAXException {
|
||||
final int length = data.length();
|
||||
if (length > m_charsBuff.length)
|
||||
{
|
||||
if (length > m_charsBuff.length) {
|
||||
m_charsBuff = new char[length * 2 + 1];
|
||||
}
|
||||
data.getChars(0, length, m_charsBuff, 0);
|
||||
@ -248,10 +236,7 @@ public abstract class SerializerBase
|
||||
* XML file, it sometimes generates a NS prefix of the form "ns?" for
|
||||
* an attribute.
|
||||
*/
|
||||
protected String patchName(String qname)
|
||||
{
|
||||
|
||||
|
||||
protected String patchName(String qname) {
|
||||
final int lastColon = qname.lastIndexOf(':');
|
||||
|
||||
if (lastColon > 0) {
|
||||
@ -259,12 +244,11 @@ public abstract class SerializerBase
|
||||
final String prefix = qname.substring(0, firstColon);
|
||||
final String localName = qname.substring(lastColon + 1);
|
||||
|
||||
// If uri is "" then ignore prefix
|
||||
// If uri is "" then ignore prefix
|
||||
final String uri = m_prefixMap.lookupNamespace(prefix);
|
||||
if (uri != null && uri.length() == 0) {
|
||||
return localName;
|
||||
}
|
||||
else if (firstColon != lastColon) {
|
||||
} else if (firstColon != lastColon) {
|
||||
return prefix + ':' + localName;
|
||||
}
|
||||
}
|
||||
@ -277,8 +261,7 @@ public abstract class SerializerBase
|
||||
* @param qname the qualified name
|
||||
* @return the name, but excluding any prefix and colon.
|
||||
*/
|
||||
protected static String getLocalName(String qname)
|
||||
{
|
||||
protected static String getLocalName(String qname) {
|
||||
final int col = qname.lastIndexOf(':');
|
||||
return (col > 0) ? qname.substring(col + 1) : qname;
|
||||
}
|
||||
@ -309,8 +292,7 @@ public abstract class SerializerBase
|
||||
* during the invocation of the events in this interface. The
|
||||
* application should not attempt to use it at any other time.</p>
|
||||
*/
|
||||
public void setDocumentLocator(Locator locator)
|
||||
{
|
||||
public void setDocumentLocator(Locator locator) {
|
||||
m_locator = locator;
|
||||
}
|
||||
|
||||
@ -332,20 +314,13 @@ public abstract class SerializerBase
|
||||
* @param XSLAttribute true if this attribute is coming from an xsl:attriute element
|
||||
* @see ExtendedContentHandler#addAttribute(String, String, String, String, String)
|
||||
*/
|
||||
public void addAttribute(
|
||||
String uri,
|
||||
String localName,
|
||||
String rawName,
|
||||
String type,
|
||||
String value,
|
||||
boolean XSLAttribute)
|
||||
public void addAttribute(String uri, String localName, String rawName,
|
||||
String type, String value, boolean XSLAttribute)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen)
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen) {
|
||||
addAttributeAlways(uri, localName, rawName, type, value, XSLAttribute);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -362,51 +337,32 @@ public abstract class SerializerBase
|
||||
* @return true if the attribute was added,
|
||||
* false if an existing value was replaced.
|
||||
*/
|
||||
public boolean addAttributeAlways(
|
||||
String uri,
|
||||
String localName,
|
||||
String rawName,
|
||||
String type,
|
||||
String value,
|
||||
boolean XSLAttribute)
|
||||
public boolean addAttributeAlways(String uri, String localName, String rawName,
|
||||
String type, String value, boolean XSLAttribute)
|
||||
{
|
||||
boolean was_added;
|
||||
// final int index =
|
||||
// (localName == null || uri == null) ?
|
||||
// m_attributes.getIndex(rawName):m_attributes.getIndex(uri, localName);
|
||||
int index;
|
||||
// if (localName == null || uri == null){
|
||||
// index = m_attributes.getIndex(rawName);
|
||||
// }
|
||||
// else {
|
||||
// index = m_attributes.getIndex(uri, localName);
|
||||
// }
|
||||
|
||||
if (localName == null || uri == null || uri.length() == 0)
|
||||
index = m_attributes.getIndex(rawName);
|
||||
else {
|
||||
index = m_attributes.getIndex(uri,localName);
|
||||
}
|
||||
if (index >= 0)
|
||||
{
|
||||
/* We've seen the attribute before.
|
||||
* We may have a null uri or localName, but all
|
||||
* we really want to re-set is the value anyway.
|
||||
*/
|
||||
m_attributes.setValue(index,value);
|
||||
was_added = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// the attribute doesn't exist yet, create it
|
||||
m_attributes.addAttribute(uri, localName, rawName, type, value);
|
||||
was_added = true;
|
||||
}
|
||||
return was_added;
|
||||
int index;
|
||||
|
||||
if (localName == null || uri == null || uri.length() == 0)
|
||||
index = m_attributes.getIndex(rawName);
|
||||
else {
|
||||
index = m_attributes.getIndex(uri,localName);
|
||||
}
|
||||
if (index >= 0) {
|
||||
/* We've seen the attribute before.
|
||||
* We may have a null uri or localName, but all
|
||||
* we really want to re-set is the value anyway.
|
||||
*/
|
||||
m_attributes.setValue(index,value);
|
||||
was_added = false;
|
||||
} else {
|
||||
// the attribute doesn't exist yet, create it
|
||||
m_attributes.addAttribute(uri, localName, rawName, type, value);
|
||||
was_added = true;
|
||||
}
|
||||
return was_added;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds the given attribute to the set of collected attributes,
|
||||
* but only if there is a currently open element.
|
||||
@ -414,16 +370,14 @@ public abstract class SerializerBase
|
||||
* @param name the attribute's qualified name
|
||||
* @param value the value of the attribute
|
||||
*/
|
||||
public void addAttribute(String name, final String value)
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen)
|
||||
{
|
||||
public void addAttribute(String name, final String value) {
|
||||
if (m_elemContext.m_startTagOpen) {
|
||||
final String patchedName = patchName(name);
|
||||
final String localName = getLocalName(patchedName);
|
||||
final String uri = getNamespaceURI(patchedName, false);
|
||||
|
||||
addAttributeAlways(uri,localName, patchedName, "CDATA", value, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -434,15 +388,13 @@ public abstract class SerializerBase
|
||||
* @param value the value of the attribute
|
||||
* @param uri the URI that the prefix of the name points to
|
||||
*/
|
||||
public void addXSLAttribute(String name, final String value, final String uri)
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen)
|
||||
{
|
||||
public void addXSLAttribute(String name, final String value, final String uri) {
|
||||
if (m_elemContext.m_startTagOpen) {
|
||||
final String patchedName = patchName(name);
|
||||
final String localName = getLocalName(patchedName);
|
||||
|
||||
addAttributeAlways(uri,localName, patchedName, "CDATA", value, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -451,12 +403,9 @@ public abstract class SerializerBase
|
||||
* is currently open.
|
||||
* @param atts List of attributes to add to this list
|
||||
*/
|
||||
public void addAttributes(Attributes atts) throws SAXException
|
||||
{
|
||||
|
||||
public void addAttributes(Attributes atts) throws SAXException {
|
||||
int nAtts = atts.getLength();
|
||||
for (int i = 0; i < nAtts; i++)
|
||||
{
|
||||
for (int i = 0; i < nAtts; i++) {
|
||||
String uri = atts.getURI(i);
|
||||
|
||||
if (null == uri)
|
||||
@ -469,7 +418,6 @@ public abstract class SerializerBase
|
||||
atts.getType(i),
|
||||
atts.getValue(i),
|
||||
false);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -482,8 +430,7 @@ public abstract class SerializerBase
|
||||
* or null if the serializer is not SAX 2 capable
|
||||
* @throws IOException An I/O exception occured
|
||||
*/
|
||||
public ContentHandler asContentHandler() throws IOException
|
||||
{
|
||||
public ContentHandler asContentHandler() throws IOException {
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -494,8 +441,7 @@ public abstract class SerializerBase
|
||||
* @throws org.xml.sax.SAXException The application may raise an exception.
|
||||
* @see #startEntity
|
||||
*/
|
||||
public void endEntity(String name) throws org.xml.sax.SAXException
|
||||
{
|
||||
public void endEntity(String name) throws org.xml.sax.SAXException {
|
||||
if (name.equals("[dtd]"))
|
||||
m_inExternalDTD = false;
|
||||
m_inEntityRef = false;
|
||||
@ -509,27 +455,24 @@ public abstract class SerializerBase
|
||||
* ToStream serializers, not ToSAXHandler serializers.
|
||||
* @see ToStream
|
||||
*/
|
||||
public void close()
|
||||
{
|
||||
public void close() {
|
||||
// do nothing (base behavior)
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize global variables
|
||||
*/
|
||||
protected void initCDATA()
|
||||
{
|
||||
protected void initCDATA() {
|
||||
// CDATA stack
|
||||
// _cdataStack = new Stack();
|
||||
// _cdataStack.push(new Integer(-1)); // push dummy value
|
||||
// _cdataStack = new Stack();
|
||||
// _cdataStack.push(new Integer(-1)); // push dummy value
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the character encoding to be used in the output document.
|
||||
* @return the character encoding to be used in the output document.
|
||||
*/
|
||||
public String getEncoding()
|
||||
{
|
||||
public String getEncoding() {
|
||||
return getOutputProperty(OutputKeys.ENCODING);
|
||||
}
|
||||
|
||||
@ -537,8 +480,7 @@ public abstract class SerializerBase
|
||||
* Sets the character encoding coming from the xsl:output encoding stylesheet attribute.
|
||||
* @param m_encoding the character encoding
|
||||
*/
|
||||
public void setEncoding(String encoding)
|
||||
{
|
||||
public void setEncoding(String encoding) {
|
||||
setOutputProperty(OutputKeys.ENCODING,encoding);
|
||||
}
|
||||
|
||||
@ -547,19 +489,16 @@ public abstract class SerializerBase
|
||||
* @param b true if the XML declaration is to be omitted from the output
|
||||
* document.
|
||||
*/
|
||||
public void setOmitXMLDeclaration(boolean b)
|
||||
{
|
||||
public void setOmitXMLDeclaration(boolean b) {
|
||||
String val = b ? "yes":"no";
|
||||
setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,val);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return true if the XML declaration is to be omitted from the output
|
||||
* document.
|
||||
*/
|
||||
public boolean getOmitXMLDeclaration()
|
||||
{
|
||||
public boolean getOmitXMLDeclaration() {
|
||||
return m_shouldNotWriteXMLHeader;
|
||||
}
|
||||
|
||||
@ -625,8 +564,7 @@ public abstract class SerializerBase
|
||||
* document. This method remembers if the value was explicitly set using
|
||||
* this method, verses if the value is the default value.
|
||||
*/
|
||||
public void setStandalone(String standalone)
|
||||
{
|
||||
public void setStandalone(String standalone) {
|
||||
setOutputProperty(OutputKeys.STANDALONE, standalone);
|
||||
}
|
||||
|
||||
@ -635,8 +573,7 @@ public abstract class SerializerBase
|
||||
* default or explicite setting.
|
||||
* @param standalone "yes" | "no"
|
||||
*/
|
||||
protected void setStandaloneInternal(String standalone)
|
||||
{
|
||||
protected void setStandaloneInternal(String standalone) {
|
||||
if ("yes".equals(standalone))
|
||||
m_standalone = "yes";
|
||||
else
|
||||
@ -650,8 +587,7 @@ public abstract class SerializerBase
|
||||
* be included in the output document.
|
||||
* @see XSLOutputAttributes#getStandalone()
|
||||
*/
|
||||
public String getStandalone()
|
||||
{
|
||||
public String getStandalone() {
|
||||
return m_standalone;
|
||||
}
|
||||
|
||||
@ -659,8 +595,7 @@ public abstract class SerializerBase
|
||||
* @return true if the output document should be indented to visually
|
||||
* indicate its structure.
|
||||
*/
|
||||
public boolean getIndent()
|
||||
{
|
||||
public boolean getIndent() {
|
||||
return m_doIndent;
|
||||
}
|
||||
/**
|
||||
@ -669,8 +604,7 @@ public abstract class SerializerBase
|
||||
* @return the mediatype the media-type or MIME type associated with the
|
||||
* output document.
|
||||
*/
|
||||
public String getMediaType()
|
||||
{
|
||||
public String getMediaType() {
|
||||
return m_mediatype;
|
||||
}
|
||||
|
||||
@ -678,8 +612,7 @@ public abstract class SerializerBase
|
||||
* Gets the version of the output format.
|
||||
* @return the version of the output format.
|
||||
*/
|
||||
public String getVersion()
|
||||
{
|
||||
public String getVersion() {
|
||||
return m_version;
|
||||
}
|
||||
|
||||
@ -688,8 +621,7 @@ public abstract class SerializerBase
|
||||
* @param version the version of the output format.
|
||||
* @see SerializationHandler#setVersion(String)
|
||||
*/
|
||||
public void setVersion(String version)
|
||||
{
|
||||
public void setVersion(String version) {
|
||||
setOutputProperty(OutputKeys.VERSION, version);
|
||||
}
|
||||
|
||||
@ -700,16 +632,14 @@ public abstract class SerializerBase
|
||||
* @see javax.xml.transform.OutputKeys#MEDIA_TYPE
|
||||
* @see SerializationHandler#setMediaType(String)
|
||||
*/
|
||||
public void setMediaType(String mediaType)
|
||||
{
|
||||
public void setMediaType(String mediaType) {
|
||||
setOutputProperty(OutputKeys.MEDIA_TYPE,mediaType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the number of spaces to indent for each indentation level.
|
||||
*/
|
||||
public int getIndentAmount()
|
||||
{
|
||||
public int getIndentAmount() {
|
||||
return m_indentAmount;
|
||||
}
|
||||
|
||||
@ -717,8 +647,7 @@ public abstract class SerializerBase
|
||||
* Sets the indentation amount.
|
||||
* @param m_indentAmount The m_indentAmount to set
|
||||
*/
|
||||
public void setIndentAmount(int m_indentAmount)
|
||||
{
|
||||
public void setIndentAmount(int m_indentAmount) {
|
||||
this.m_indentAmount = m_indentAmount;
|
||||
}
|
||||
|
||||
@ -729,8 +658,7 @@ public abstract class SerializerBase
|
||||
* visually indicate its structure.
|
||||
* @see XSLOutputAttributes#setIndent(boolean)
|
||||
*/
|
||||
public void setIndent(boolean doIndent)
|
||||
{
|
||||
public void setIndent(boolean doIndent) {
|
||||
String val = doIndent ? "yes":"no";
|
||||
setOutputProperty(OutputKeys.INDENT,val);
|
||||
}
|
||||
@ -740,8 +668,7 @@ public abstract class SerializerBase
|
||||
* @param isStandalone true if the ORACLE_IS_STANDALONE is set to yes
|
||||
* @see OutputPropertiesFactory ORACLE_IS_STANDALONE
|
||||
*/
|
||||
public void setIsStandalone(boolean isStandalone)
|
||||
{
|
||||
public void setIsStandalone(boolean isStandalone) {
|
||||
m_isStandalone = isStandalone;
|
||||
}
|
||||
|
||||
@ -772,8 +699,7 @@ public abstract class SerializerBase
|
||||
* @throws IOException An I/O exception occured
|
||||
* @see Serializer#asDOMSerializer()
|
||||
*/
|
||||
public DOMSerializer asDOMSerializer() throws IOException
|
||||
{
|
||||
public DOMSerializer asDOMSerializer() throws IOException {
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -785,8 +711,7 @@ public abstract class SerializerBase
|
||||
*
|
||||
* @return true if strings are equal.
|
||||
*/
|
||||
private static final boolean subPartMatch(String p, String t)
|
||||
{
|
||||
private static final boolean subPartMatch(String p, String t) {
|
||||
return (p == t) || ((null != p) && (p.equals(t)));
|
||||
}
|
||||
|
||||
@ -799,8 +724,7 @@ public abstract class SerializerBase
|
||||
* @return returns the prefix of the qualified name,
|
||||
* or null if there is no prefix.
|
||||
*/
|
||||
protected static final String getPrefixPart(String qname)
|
||||
{
|
||||
protected static final String getPrefixPart(String qname) {
|
||||
final int col = qname.indexOf(':');
|
||||
return (col > 0) ? qname.substring(0, col) : null;
|
||||
//return (col > 0) ? qname.substring(0,col) : "";
|
||||
@ -811,8 +735,7 @@ public abstract class SerializerBase
|
||||
* @return the current namespace mappings (prefix/uri)
|
||||
* @see ExtendedContentHandler#getNamespaceMappings()
|
||||
*/
|
||||
public NamespaceMappings getNamespaceMappings()
|
||||
{
|
||||
public NamespaceMappings getNamespaceMappings() {
|
||||
return m_prefixMap;
|
||||
}
|
||||
|
||||
@ -822,8 +745,7 @@ public abstract class SerializerBase
|
||||
* @return a prefix pointing to the given URI (if any).
|
||||
* @see ExtendedContentHandler#getPrefix(String)
|
||||
*/
|
||||
public String getPrefix(String namespaceURI)
|
||||
{
|
||||
public String getPrefix(String namespaceURI) {
|
||||
String prefix = m_prefixMap.lookupPrefix(namespaceURI);
|
||||
return prefix;
|
||||
}
|
||||
@ -836,19 +758,15 @@ public abstract class SerializerBase
|
||||
* an element.
|
||||
* @return returns the namespace URI associated with the qualified name.
|
||||
*/
|
||||
public String getNamespaceURI(String qname, boolean isElement)
|
||||
{
|
||||
public String getNamespaceURI(String qname, boolean isElement) {
|
||||
String uri = EMPTYSTRING;
|
||||
int col = qname.lastIndexOf(':');
|
||||
final String prefix = (col > 0) ? qname.substring(0, col) : EMPTYSTRING;
|
||||
|
||||
if (!EMPTYSTRING.equals(prefix) || isElement)
|
||||
{
|
||||
if (m_prefixMap != null)
|
||||
{
|
||||
if (!EMPTYSTRING.equals(prefix) || isElement) {
|
||||
if (m_prefixMap != null) {
|
||||
uri = m_prefixMap.lookupNamespace(prefix);
|
||||
if (uri == null && !prefix.equals(XMLNS_PREFIX))
|
||||
{
|
||||
if (uri == null && !prefix.equals(XMLNS_PREFIX)) {
|
||||
throw new RuntimeException(
|
||||
Utils.messages.createMessage(
|
||||
MsgKey.ER_NAMESPACE_PREFIX,
|
||||
@ -866,8 +784,7 @@ public abstract class SerializerBase
|
||||
* @return the namespace URI currently associated with the
|
||||
* prefix, null if the prefix is undefined.
|
||||
*/
|
||||
public String getNamespaceURIFromPrefix(String prefix)
|
||||
{
|
||||
public String getNamespaceURIFromPrefix(String prefix) {
|
||||
String uri = null;
|
||||
if (m_prefixMap != null)
|
||||
uri = m_prefixMap.lookupNamespace(prefix);
|
||||
@ -881,16 +798,14 @@ public abstract class SerializerBase
|
||||
*
|
||||
* @throws org.xml.sax.SAXException
|
||||
*/
|
||||
public void entityReference(String name) throws org.xml.sax.SAXException
|
||||
{
|
||||
|
||||
public void entityReference(String name) throws org.xml.sax.SAXException {
|
||||
flushPending();
|
||||
|
||||
startEntity(name);
|
||||
endEntity(name);
|
||||
|
||||
if (m_tracer != null)
|
||||
fireEntityReference(name);
|
||||
fireEntityReference(name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -898,8 +813,7 @@ public abstract class SerializerBase
|
||||
* @param t the transformer associated with this serializer.
|
||||
* @see SerializationHandler#setTransformer(Transformer)
|
||||
*/
|
||||
public void setTransformer(Transformer t)
|
||||
{
|
||||
public void setTransformer(Transformer t) {
|
||||
m_transformer = t;
|
||||
|
||||
// If this transformer object implements the SerializerTrace interface
|
||||
@ -912,13 +826,13 @@ public abstract class SerializerBase
|
||||
m_tracer = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the transformer associated with this serializer
|
||||
* @return returns the transformer associated with this serializer.
|
||||
* @see SerializationHandler#getTransformer()
|
||||
*/
|
||||
public Transformer getTransformer()
|
||||
{
|
||||
public Transformer getTransformer() {
|
||||
return m_transformer;
|
||||
}
|
||||
|
||||
@ -933,11 +847,9 @@ public abstract class SerializerBase
|
||||
{
|
||||
flushPending();
|
||||
String data = node.getNodeValue();
|
||||
if (data != null)
|
||||
{
|
||||
if (data != null) {
|
||||
final int length = data.length();
|
||||
if (length > m_charsBuff.length)
|
||||
{
|
||||
if (length > m_charsBuff.length) {
|
||||
m_charsBuff = new char[length * 2 + 1];
|
||||
}
|
||||
data.getChars(0, length, m_charsBuff, 0);
|
||||
@ -956,16 +868,13 @@ public abstract class SerializerBase
|
||||
* @see org.xml.sax.ErrorHandler#fatalError(SAXParseException)
|
||||
*/
|
||||
public void fatalError(SAXParseException exc) throws SAXException {
|
||||
|
||||
m_elemContext.m_startTagOpen = false;
|
||||
|
||||
m_elemContext.m_startTagOpen = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ErrorHandler#warning(SAXParseException)
|
||||
*/
|
||||
public void warning(SAXParseException exc) throws SAXException
|
||||
{
|
||||
public void warning(SAXParseException exc) throws SAXException {
|
||||
}
|
||||
|
||||
/**
|
||||
@ -982,20 +891,6 @@ public abstract class SerializerBase
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Report the characters event
|
||||
* @param chars content of characters
|
||||
* @param start starting index of characters to output
|
||||
* @param length number of characters to output
|
||||
*/
|
||||
// protected void fireCharEvent(char[] chars, int start, int length)
|
||||
// throws org.xml.sax.SAXException
|
||||
// {
|
||||
// if (m_tracer != null)
|
||||
// m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CHARACTERS, chars, start,length);
|
||||
// }
|
||||
//
|
||||
|
||||
/**
|
||||
* This method is only used internally when flushing the writer from the
|
||||
* various fire...() trace events. Due to the writer being wrapped with
|
||||
@ -1005,20 +900,15 @@ public abstract class SerializerBase
|
||||
* which trace the output written to the output stream.
|
||||
*
|
||||
*/
|
||||
private void flushMyWriter()
|
||||
{
|
||||
if (m_writer != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
private void flushMyWriter() {
|
||||
if (m_writer != null) {
|
||||
try {
|
||||
m_writer.flush();
|
||||
}
|
||||
catch(IOException ioe)
|
||||
{
|
||||
|
||||
} catch(IOException ioe) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Report the CDATA trace event
|
||||
* @param chars content of CDATA
|
||||
@ -1028,10 +918,9 @@ public abstract class SerializerBase
|
||||
protected void fireCDATAEvent(char[] chars, int start, int length)
|
||||
throws org.xml.sax.SAXException
|
||||
{
|
||||
if (m_tracer != null)
|
||||
{
|
||||
if (m_tracer != null) {
|
||||
flushMyWriter();
|
||||
m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CDATA, chars, start,length);
|
||||
m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_CDATA, chars, start,length);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1044,10 +933,9 @@ public abstract class SerializerBase
|
||||
protected void fireCommentEvent(char[] chars, int start, int length)
|
||||
throws org.xml.sax.SAXException
|
||||
{
|
||||
if (m_tracer != null)
|
||||
{
|
||||
if (m_tracer != null) {
|
||||
flushMyWriter();
|
||||
m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_COMMENT, new String(chars, start, length));
|
||||
m_tracer.fireGenerateEvent(SerializerTrace.EVENTTYPE_COMMENT, new String(chars, start, length));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1221,12 +1109,10 @@ public abstract class SerializerBase
|
||||
*
|
||||
* @see ExtendedContentHandler#setSourceLocator(javax.xml.transform.SourceLocator)
|
||||
*/
|
||||
public void setSourceLocator(SourceLocator locator)
|
||||
{
|
||||
public void setSourceLocator(SourceLocator locator) {
|
||||
m_sourceLocator = locator;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Used only by TransformerSnapshotImpl to restore the serialization
|
||||
* to a previous state.
|
||||
@ -1237,8 +1123,7 @@ public abstract class SerializerBase
|
||||
m_prefixMap = mappings;
|
||||
}
|
||||
|
||||
public boolean reset()
|
||||
{
|
||||
public boolean reset() {
|
||||
resetSerializerBase();
|
||||
return true;
|
||||
}
|
||||
@ -1247,8 +1132,7 @@ public abstract class SerializerBase
|
||||
* Reset all of the fields owned by SerializerBase
|
||||
*
|
||||
*/
|
||||
private void resetSerializerBase()
|
||||
{
|
||||
private void resetSerializerBase() {
|
||||
this.m_attributes.clear();
|
||||
this.m_StringOfCDATASections = null;
|
||||
this.m_elemContext = new ElemContext();
|
||||
@ -1280,13 +1164,12 @@ public abstract class SerializerBase
|
||||
*
|
||||
* This concept is made clear in the XSLT 2.0 draft.
|
||||
*/
|
||||
final boolean inTemporaryOutputState()
|
||||
{
|
||||
final boolean inTemporaryOutputState() {
|
||||
/* This is a hack. We should really be letting the serializer know
|
||||
* that it is in temporary output state with an explicit call, but
|
||||
* from a pragmatic point of view (for now anyways) having no output
|
||||
* encoding at all, not even the default UTF-8 indicates that the serializer
|
||||
* is being used for temporary RTF.
|
||||
* encoding at all, not even the default UTF-8 indicates that the
|
||||
* serializer is being used for temporary RTF.
|
||||
*/
|
||||
return (getEncoding() == null);
|
||||
|
||||
@ -1295,36 +1178,38 @@ public abstract class SerializerBase
|
||||
/**
|
||||
* This method adds an attribute the the current element,
|
||||
* but should not be used for an xsl:attribute child.
|
||||
* @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||
* @see ExtendedContentHandler#addAttribute(java.lang.String, java.lang.String,
|
||||
* java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void addAttribute(String uri, String localName, String rawName, String type, String value) throws SAXException
|
||||
public void addAttribute(String uri, String localName, String rawName,
|
||||
String type, String value) throws SAXException
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen)
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen) {
|
||||
addAttributeAlways(uri, localName, rawName, type, value, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.DTDHandler#notationDecl(java.lang.String, java.lang.String, java.lang.String)
|
||||
* @see org.xml.sax.DTDHandler#notationDecl(java.lang.String,
|
||||
* java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void notationDecl(String arg0, String arg1, String arg2)
|
||||
throws SAXException {
|
||||
throws SAXException
|
||||
{
|
||||
// This method just provides a definition to satisfy the interface
|
||||
// A particular sub-class of SerializerBase provides the implementation (if desired)
|
||||
// A particular sub-class of SerializerBase provides the implementation
|
||||
// (if desired)
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.DTDHandler#unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||
* @see org.xml.sax.DTDHandler#unparsedEntityDecl(java.lang.String,
|
||||
* java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void unparsedEntityDecl(
|
||||
String arg0,
|
||||
String arg1,
|
||||
String arg2,
|
||||
String arg3)
|
||||
throws SAXException {
|
||||
public void unparsedEntityDecl(String arg0, String arg1, String arg2,
|
||||
String arg3) throws SAXException {
|
||||
// This method just provides a definition to satisfy the interface
|
||||
// A particular sub-class of SerializerBase provides the implementation (if desired)
|
||||
// A particular sub-class of SerializerBase provides the implementation
|
||||
// (if desired)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1606,6 +1491,7 @@ public abstract class SerializerBase
|
||||
* map will have what that attribute maps to.
|
||||
*/
|
||||
private HashMap<String, String> m_OutputProps;
|
||||
|
||||
/**
|
||||
* A mapping of keys to default values, for example if
|
||||
* the default value of the encoding is "UTF-8" then this
|
||||
@ -1616,6 +1502,7 @@ public abstract class SerializerBase
|
||||
Set<String> getOutputPropDefaultKeys() {
|
||||
return m_OutputPropsDefault.keySet();
|
||||
}
|
||||
|
||||
Set<String> getOutputPropKeys() {
|
||||
return m_OutputProps.keySet();
|
||||
}
|
||||
@ -1634,6 +1521,7 @@ public abstract class SerializerBase
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name The name of the property, e.g. "{http://myprop}indent-tabs" or "indent".
|
||||
|
@ -1,13 +1,13 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
/*
|
||||
* Copyright 2001-2004 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed 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
|
||||
* 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
|
||||
*
|
||||
@ -17,13 +17,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
* $Id: ToSAXHandler.java,v 1.2.4.1 2005/09/22 11:03:15 pvedula Exp $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.serializer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.ErrorHandler;
|
||||
@ -39,23 +36,16 @@ import org.xml.sax.ext.LexicalHandler;
|
||||
*
|
||||
* @xsl.usage internal
|
||||
*/
|
||||
public abstract class ToSAXHandler extends SerializerBase
|
||||
{
|
||||
public ToSAXHandler()
|
||||
{
|
||||
}
|
||||
public abstract class ToSAXHandler extends SerializerBase {
|
||||
public ToSAXHandler() { }
|
||||
|
||||
public ToSAXHandler(
|
||||
ContentHandler hdlr,
|
||||
LexicalHandler lex,
|
||||
String encoding)
|
||||
{
|
||||
public ToSAXHandler(ContentHandler hdlr, LexicalHandler lex, String encoding) {
|
||||
setContentHandler(hdlr);
|
||||
setLexHandler(lex);
|
||||
setEncoding(encoding);
|
||||
}
|
||||
public ToSAXHandler(ContentHandler handler, String encoding)
|
||||
{
|
||||
|
||||
public ToSAXHandler(ContentHandler handler, String encoding) {
|
||||
setContentHandler(handler);
|
||||
setEncoding(encoding);
|
||||
}
|
||||
@ -90,16 +80,14 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
/**
|
||||
* Pass callback to the SAX Handler
|
||||
*/
|
||||
protected void startDocumentInternal() throws SAXException
|
||||
{
|
||||
if (m_needToCallStartDocument)
|
||||
{
|
||||
protected void startDocumentInternal() throws SAXException {
|
||||
if (m_needToCallStartDocument) {
|
||||
super.startDocumentInternal();
|
||||
|
||||
m_saxHandler.startDocument();
|
||||
m_needToCallStartDocument = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do nothing.
|
||||
* @see org.xml.sax.ext.LexicalHandler#startDTD(String, String, String)
|
||||
@ -113,20 +101,20 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
/**
|
||||
* Receive notification of character data.
|
||||
*
|
||||
* @param characters The string of characters to process.
|
||||
* @param chars The string of characters to process.
|
||||
*
|
||||
* @throws org.xml.sax.SAXException
|
||||
*
|
||||
* @see ExtendedContentHandler#characters(String)
|
||||
*/
|
||||
public void characters(String characters) throws SAXException
|
||||
{
|
||||
final int len = characters.length();
|
||||
if (len > m_charsBuff.length)
|
||||
{
|
||||
m_charsBuff = new char[len*2 + 1];
|
||||
public void characters(String chars) throws SAXException {
|
||||
final int len = (chars == null) ? 0 : chars.length();
|
||||
if (len > m_charsBuff.length) {
|
||||
m_charsBuff = new char[len * 2 + 1];
|
||||
}
|
||||
if (len > 0) {
|
||||
chars.getChars(0, len, m_charsBuff, 0);
|
||||
}
|
||||
characters.getChars(0,len, m_charsBuff, 0);
|
||||
characters(m_charsBuff, 0, len);
|
||||
}
|
||||
|
||||
@ -135,16 +123,13 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
*
|
||||
* @see ExtendedLexicalHandler#comment(String)
|
||||
*/
|
||||
public void comment(String comment) throws SAXException
|
||||
{
|
||||
public void comment(String comment) throws SAXException {
|
||||
flushPending();
|
||||
|
||||
// Ignore if a lexical handler has not been set
|
||||
if (m_lexHandler != null)
|
||||
{
|
||||
if (m_lexHandler != null) {
|
||||
final int len = comment.length();
|
||||
if (len > m_charsBuff.length)
|
||||
{
|
||||
if (len > m_charsBuff.length) {
|
||||
m_charsBuff = new char[len*2 + 1];
|
||||
}
|
||||
comment.getChars(0,len, m_charsBuff, 0);
|
||||
@ -153,7 +138,6 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
if (m_tracer != null)
|
||||
super.fireCommentEvent(m_charsBuff, 0, len);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -167,12 +151,10 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
// Redefined in SAXXMLOutput
|
||||
}
|
||||
|
||||
protected void closeStartTag() throws SAXException
|
||||
{
|
||||
protected void closeStartTag() throws SAXException {
|
||||
}
|
||||
|
||||
protected void closeCDATA() throws SAXException
|
||||
{
|
||||
protected void closeCDATA() throws SAXException {
|
||||
// Redefined in SAXXMLOutput
|
||||
}
|
||||
|
||||
@ -191,12 +173,8 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
*
|
||||
* @see org.xml.sax.ContentHandler#startElement(String,String,String,Attributes)
|
||||
*/
|
||||
public void startElement(
|
||||
String arg0,
|
||||
String arg1,
|
||||
String arg2,
|
||||
Attributes arg3)
|
||||
throws SAXException
|
||||
public void startElement(String arg0, String arg1, String arg2,
|
||||
Attributes arg3) throws SAXException
|
||||
{
|
||||
if (m_state != null) {
|
||||
m_state.resetState(getTransformer());
|
||||
@ -211,8 +189,7 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* Sets the LexicalHandler.
|
||||
* @param _lexHandler The LexicalHandler to set
|
||||
*/
|
||||
public void setLexHandler(LexicalHandler _lexHandler)
|
||||
{
|
||||
public void setLexHandler(LexicalHandler _lexHandler) {
|
||||
this.m_lexHandler = _lexHandler;
|
||||
}
|
||||
|
||||
@ -220,11 +197,9 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* Sets the SAX ContentHandler.
|
||||
* @param _saxHandler The ContentHandler to set
|
||||
*/
|
||||
public void setContentHandler(ContentHandler _saxHandler)
|
||||
{
|
||||
public void setContentHandler(ContentHandler _saxHandler) {
|
||||
this.m_saxHandler = _saxHandler;
|
||||
if (m_lexHandler == null && _saxHandler instanceof LexicalHandler)
|
||||
{
|
||||
if (m_lexHandler == null && _saxHandler instanceof LexicalHandler) {
|
||||
// we are not overwriting an existing LexicalHandler, and _saxHandler
|
||||
// is also implements LexicalHandler, so lets use it
|
||||
m_lexHandler = (LexicalHandler) _saxHandler;
|
||||
@ -236,8 +211,7 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* stream serializers.
|
||||
* @see SerializationHandler#setCdataSectionElements(java.util.ArrayList<String>)
|
||||
*/
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
|
||||
{
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@ -247,8 +221,7 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* @param doOutputNSAttr whether or not namespace declarations
|
||||
* should appear as attributes
|
||||
*/
|
||||
public void setShouldOutputNSAttr(boolean doOutputNSAttr)
|
||||
{
|
||||
public void setShouldOutputNSAttr(boolean doOutputNSAttr) {
|
||||
m_shouldGenerateNSAttribute = doOutputNSAttr;
|
||||
}
|
||||
|
||||
@ -258,8 +231,7 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* also be mirrored with self generated additional attributes of elements
|
||||
* that declare the namespace, for example the attribute xmlns:prefix1="uri1"
|
||||
*/
|
||||
boolean getShouldOutputNSAttr()
|
||||
{
|
||||
boolean getShouldOutputNSAttr() {
|
||||
return m_shouldGenerateNSAttribute;
|
||||
}
|
||||
|
||||
@ -267,27 +239,21 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* This method flushes any pending events, which can be startDocument()
|
||||
* closing the opening tag of an element, or closing an open CDATA section.
|
||||
*/
|
||||
public void flushPending() throws SAXException
|
||||
{
|
||||
|
||||
if (m_needToCallStartDocument)
|
||||
{
|
||||
public void flushPending() throws SAXException {
|
||||
if (m_needToCallStartDocument) {
|
||||
startDocumentInternal();
|
||||
m_needToCallStartDocument = false;
|
||||
}
|
||||
|
||||
if (m_elemContext.m_startTagOpen)
|
||||
{
|
||||
if (m_elemContext.m_startTagOpen) {
|
||||
closeStartTag();
|
||||
m_elemContext.m_startTagOpen = false;
|
||||
}
|
||||
|
||||
if (m_cdataTagOpen)
|
||||
{
|
||||
if (m_cdataTagOpen) {
|
||||
closeCDATA();
|
||||
m_cdataTagOpen = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -350,8 +316,7 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
throws org.xml.sax.SAXException
|
||||
{
|
||||
// remember the current node
|
||||
if (m_state != null)
|
||||
{
|
||||
if (m_state != null) {
|
||||
m_state.setCurrentNode(node);
|
||||
}
|
||||
|
||||
@ -392,12 +357,10 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
*/
|
||||
public void warning(SAXParseException exc) throws SAXException {
|
||||
super.warning(exc);
|
||||
|
||||
if (m_saxHandler instanceof ErrorHandler)
|
||||
((ErrorHandler)m_saxHandler).warning(exc);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Try's to reset the super class and reset this class for
|
||||
* re-use, so that you don't need to create a new serializer
|
||||
@ -406,11 +369,9 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* @return true if the class was successfuly reset.
|
||||
* @see Serializer#reset()
|
||||
*/
|
||||
public boolean reset()
|
||||
{
|
||||
public boolean reset() {
|
||||
boolean wasReset = false;
|
||||
if (super.reset())
|
||||
{
|
||||
if (super.reset()) {
|
||||
resetToSAXHandler();
|
||||
wasReset = true;
|
||||
}
|
||||
@ -421,8 +382,7 @@ public abstract class ToSAXHandler extends SerializerBase
|
||||
* Reset all of the fields owned by ToSAXHandler class
|
||||
*
|
||||
*/
|
||||
private void resetToSAXHandler()
|
||||
{
|
||||
private void resetToSAXHandler() {
|
||||
this.m_lexHandler = null;
|
||||
this.m_saxHandler = null;
|
||||
this.m_state = null;
|
||||
|
@ -1,15 +1,13 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
* Copyright (c) 2006, 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
|
||||
* 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
|
||||
*
|
||||
@ -19,12 +17,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
* $Id: ToStream.java,v 1.4 2005/11/10 06:43:26 suresh_emailid Exp $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.serializer;
|
||||
|
||||
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
@ -36,30 +35,22 @@ import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.xml.transform.ErrorListener;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerException;
|
||||
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
|
||||
import com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException;
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
//import com.sun.media.sound.IESecurity;
|
||||
|
||||
/**
|
||||
* This abstract class is a base class for other stream
|
||||
* serializers (xml, html, text ...) that write output to a stream.
|
||||
*
|
||||
* @xsl.usage internal
|
||||
*/
|
||||
abstract public class ToStream extends SerializerBase
|
||||
{
|
||||
abstract public class ToStream extends SerializerBase {
|
||||
|
||||
private static final String COMMENT_BEGIN = "<!--";
|
||||
private static final String COMMENT_END = "-->";
|
||||
@ -67,7 +58,6 @@ abstract public class ToStream extends SerializerBase
|
||||
/** Stack to keep track of disabling output escaping. */
|
||||
protected BoolStack m_disableOutputEscapingStates = new BoolStack();
|
||||
|
||||
|
||||
/**
|
||||
* The encoding information associated with this serializer.
|
||||
* Although initially there is no encoding,
|
||||
@ -87,21 +77,17 @@ abstract public class ToStream extends SerializerBase
|
||||
*/
|
||||
java.lang.reflect.Method m_canConvertMeth;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Boolean that tells if we already tried to get the converter.
|
||||
*/
|
||||
boolean m_triedToGetConverter = false;
|
||||
|
||||
|
||||
/**
|
||||
* Opaque reference to the sun.io.CharToByteConverter for this
|
||||
* encoding.
|
||||
*/
|
||||
Object m_charToByteConverter = null;
|
||||
|
||||
|
||||
/**
|
||||
* Stack to keep track of whether or not we need to
|
||||
* preserve whitespace.
|
||||
@ -139,7 +125,6 @@ abstract public class ToStream extends SerializerBase
|
||||
*/
|
||||
protected int m_maxCharacter = Encodings.getLastPrintable();
|
||||
|
||||
|
||||
/**
|
||||
* The system line separator for writing out line breaks.
|
||||
* The default value is from the system property,
|
||||
@ -188,8 +173,8 @@ abstract public class ToStream extends SerializerBase
|
||||
protected boolean m_inDoctype = false;
|
||||
|
||||
/**
|
||||
* Flag to quickly tell if the encoding is UTF8.
|
||||
*/
|
||||
* Flag to quickly tell if the encoding is UTF8.
|
||||
*/
|
||||
boolean m_isUTF8 = false;
|
||||
|
||||
/**
|
||||
@ -203,29 +188,23 @@ abstract public class ToStream extends SerializerBase
|
||||
*/
|
||||
private boolean m_expandDTDEntities = true;
|
||||
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
public ToStream()
|
||||
{
|
||||
}
|
||||
public ToStream() { }
|
||||
|
||||
/**
|
||||
* This helper method to writes out "]]>" when closing a CDATA section.
|
||||
*
|
||||
* @throws org.xml.sax.SAXException
|
||||
*/
|
||||
protected void closeCDATA() throws org.xml.sax.SAXException
|
||||
{
|
||||
try
|
||||
{
|
||||
protected void closeCDATA() throws org.xml.sax.SAXException {
|
||||
try {
|
||||
m_writer.write(CDATA_DELIMITER_CLOSE);
|
||||
// write out a CDATA section closing "]]>"
|
||||
m_cdataTagOpen = false; // Remember that we have done so.
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
catch (IOException e) {
|
||||
throw new SAXException(e);
|
||||
}
|
||||
}
|
||||
@ -237,18 +216,11 @@ abstract public class ToStream extends SerializerBase
|
||||
* @param node Node to serialize.
|
||||
* @throws IOException An I/O exception occured while serializing
|
||||
*/
|
||||
public void serialize(Node node) throws IOException
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
TreeWalker walker =
|
||||
new TreeWalker(this);
|
||||
|
||||
public void serialize(Node node) throws IOException {
|
||||
try {
|
||||
TreeWalker walker = new TreeWalker(this);
|
||||
walker.traverse(node);
|
||||
}
|
||||
catch (org.xml.sax.SAXException se)
|
||||
{
|
||||
} catch (org.xml.sax.SAXException se) {
|
||||
throw new WrappedRuntimeException(se);
|
||||
}
|
||||
}
|
||||
@ -260,8 +232,7 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* NEEDSDOC ($objectName$) @return
|
||||
*/
|
||||
static final boolean isUTF16Surrogate(char c)
|
||||
{
|
||||
static final boolean isUTF16Surrogate(char c) {
|
||||
return (c & 0xFC00) == 0xD800;
|
||||
}
|
||||
|
||||
@ -275,49 +246,40 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @throws org.xml.sax.SAXException
|
||||
*/
|
||||
protected final void flushWriter() throws org.xml.sax.SAXException
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
if (null != writer)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (writer instanceof WriterToUTF8Buffered)
|
||||
{
|
||||
protected final void flushWriter() throws org.xml.sax.SAXException {
|
||||
final Writer writer = m_writer;
|
||||
if (null != writer) {
|
||||
try {
|
||||
if (writer instanceof WriterToUTF8Buffered) {
|
||||
if (m_shouldFlush)
|
||||
((WriterToUTF8Buffered) writer).flush();
|
||||
((WriterToUTF8Buffered)writer).flush();
|
||||
else
|
||||
((WriterToUTF8Buffered) writer).flushBuffer();
|
||||
((WriterToUTF8Buffered)writer).flushBuffer();
|
||||
}
|
||||
if (writer instanceof WriterToASCI)
|
||||
{
|
||||
if (writer instanceof WriterToASCI) {
|
||||
if (m_shouldFlush)
|
||||
writer.flush();
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
// Flush always.
|
||||
// Not a great thing if the writer was created
|
||||
// by this class, but don't have a choice.
|
||||
writer.flush();
|
||||
}
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
} catch (IOException ioe) {
|
||||
throw new org.xml.sax.SAXException(ioe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
OutputStream m_outputStream;
|
||||
|
||||
/**
|
||||
* Get the output stream where the events will be serialized to.
|
||||
*
|
||||
* @return reference to the result stream, or null of only a writer was
|
||||
* set.
|
||||
*/
|
||||
public OutputStream getOutputStream()
|
||||
{
|
||||
public OutputStream getOutputStream() {
|
||||
return m_outputStream;
|
||||
}
|
||||
|
||||
@ -341,9 +303,8 @@ abstract public class ToStream extends SerializerBase
|
||||
// Do not inline external DTD
|
||||
if (m_inExternalDTD)
|
||||
return;
|
||||
try
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
try {
|
||||
final Writer writer = m_writer;
|
||||
DTDprolog();
|
||||
|
||||
writer.write("<!ELEMENT ");
|
||||
@ -379,13 +340,10 @@ abstract public class ToStream extends SerializerBase
|
||||
// Do not inline external DTD
|
||||
if (m_inExternalDTD)
|
||||
return;
|
||||
try
|
||||
{
|
||||
try {
|
||||
DTDprolog();
|
||||
outputEntityDecl(name, value);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
} catch (IOException e) {
|
||||
throw new SAXException(e);
|
||||
}
|
||||
|
||||
@ -401,7 +359,7 @@ abstract public class ToStream extends SerializerBase
|
||||
*/
|
||||
void outputEntityDecl(String name, String value) throws IOException
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
writer.write("<!ENTITY ");
|
||||
writer.write(name);
|
||||
writer.write(" \"");
|
||||
@ -415,8 +373,7 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @throws org.xml.sax.SAXException
|
||||
*/
|
||||
protected final void outputLineSep() throws IOException
|
||||
{
|
||||
protected final void outputLineSep() throws IOException {
|
||||
m_writer.write(m_lineSep, 0, m_lineSepLen);
|
||||
}
|
||||
|
||||
@ -594,20 +551,17 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @param format The output format to use
|
||||
*/
|
||||
public void setOutputFormat(Properties format)
|
||||
{
|
||||
public void setOutputFormat(Properties format) {
|
||||
boolean shouldFlush = m_shouldFlush;
|
||||
|
||||
if (format != null)
|
||||
{
|
||||
if (format != null) {
|
||||
// Set the default values first,
|
||||
// and the non-default values after that,
|
||||
// just in case there is some unexpected
|
||||
// residual values left over from over-ridden default values
|
||||
Enumeration propNames;
|
||||
propNames = format.propertyNames();
|
||||
while (propNames.hasMoreElements())
|
||||
{
|
||||
while (propNames.hasMoreElements()) {
|
||||
String key = (String) propNames.nextElement();
|
||||
// Get the value, possibly a default value
|
||||
String value = format.getProperty(key);
|
||||
@ -629,18 +583,11 @@ abstract public class ToStream extends SerializerBase
|
||||
String entitiesFileName =
|
||||
(String) format.get(OutputPropertiesFactory.S_KEY_ENTITIES);
|
||||
|
||||
if (null != entitiesFileName)
|
||||
{
|
||||
|
||||
String method =
|
||||
(String) format.get(OutputKeys.METHOD);
|
||||
|
||||
if (null != entitiesFileName) {
|
||||
String method = (String) format.get(OutputKeys.METHOD);
|
||||
m_charInfo = CharInfo.getCharInfo(entitiesFileName, method);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
m_shouldFlush = shouldFlush;
|
||||
}
|
||||
|
||||
@ -678,8 +625,7 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @param writer The output writer stream
|
||||
*/
|
||||
public void setWriter(Writer writer)
|
||||
{
|
||||
public void setWriter(Writer writer) {
|
||||
setWriterInternal(writer, true);
|
||||
}
|
||||
|
||||
@ -716,8 +662,7 @@ abstract public class ToStream extends SerializerBase
|
||||
* operating systems end-of-line separator.
|
||||
* @return The previously set value of the serializer.
|
||||
*/
|
||||
public boolean setLineSepUse(boolean use_sytem_line_break)
|
||||
{
|
||||
public boolean setLineSepUse(boolean use_sytem_line_break) {
|
||||
boolean oldValue = m_lineSepUse;
|
||||
m_lineSepUse = use_sytem_line_break;
|
||||
return oldValue;
|
||||
@ -734,8 +679,7 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @param output The output stream
|
||||
*/
|
||||
public void setOutputStream(OutputStream output)
|
||||
{
|
||||
public void setOutputStream(OutputStream output) {
|
||||
setOutputStreamInternal(output, true);
|
||||
}
|
||||
|
||||
@ -848,7 +792,7 @@ abstract public class ToStream extends SerializerBase
|
||||
*/
|
||||
private void printSpace(int n) throws IOException
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
writer.write(' ');
|
||||
@ -888,7 +832,7 @@ abstract public class ToStream extends SerializerBase
|
||||
return;
|
||||
try
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
DTDprolog();
|
||||
|
||||
writer.write("<!ATTLIST ");
|
||||
@ -1038,7 +982,7 @@ abstract public class ToStream extends SerializerBase
|
||||
+ Integer.toHexString(low)}));
|
||||
}
|
||||
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
|
||||
// If we make it to here we have a valid high, low surrogate pair
|
||||
if (m_encodingInfo.isInEncoding(c,low)) {
|
||||
@ -1089,7 +1033,7 @@ abstract public class ToStream extends SerializerBase
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
protected int accumDefaultEntity(
|
||||
java.io.Writer writer,
|
||||
Writer writer,
|
||||
char ch,
|
||||
int i,
|
||||
char[] chars,
|
||||
@ -1146,7 +1090,7 @@ abstract public class ToStream extends SerializerBase
|
||||
boolean useSystemLineSeparator)
|
||||
throws IOException, org.xml.sax.SAXException
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
int end = start + length;
|
||||
|
||||
for (int i = start; i < end; i++)
|
||||
@ -1855,7 +1799,7 @@ abstract public class ToStream extends SerializerBase
|
||||
|
||||
m_startNewLine = true;
|
||||
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
writer.write('<');
|
||||
writer.write(name);
|
||||
}
|
||||
@ -1926,7 +1870,7 @@ abstract public class ToStream extends SerializerBase
|
||||
closeCDATA();
|
||||
try
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
writer.write("<!DOCTYPE ");
|
||||
writer.write(name);
|
||||
|
||||
@ -1987,7 +1931,7 @@ abstract public class ToStream extends SerializerBase
|
||||
* @throws java.io.IOException
|
||||
* @throws org.xml.sax.SAXException
|
||||
*/
|
||||
public void processAttributes(java.io.Writer writer, int nAttrs) throws IOException, SAXException
|
||||
public void processAttributes(Writer writer, int nAttrs) throws IOException, SAXException
|
||||
{
|
||||
/* real SAX attributes are not passed in, so process the
|
||||
* attributes that were collected after the startElement call.
|
||||
@ -2084,7 +2028,7 @@ abstract public class ToStream extends SerializerBase
|
||||
|
||||
try
|
||||
{
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
if (m_elemContext.m_startTagOpen)
|
||||
{
|
||||
if (m_tracer != null)
|
||||
@ -2290,7 +2234,7 @@ abstract public class ToStream extends SerializerBase
|
||||
if (shouldIndent() && !m_isStandalone)
|
||||
indent();
|
||||
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
writer.write(COMMENT_BEGIN);
|
||||
// Detect occurrences of two consecutive dashes, handle as necessary.
|
||||
for (int i = start; i < limit; i++)
|
||||
@ -2370,7 +2314,7 @@ abstract public class ToStream extends SerializerBase
|
||||
outputDocTypeDecl(m_elemContext.m_elementName, false);
|
||||
m_needToOutputDocTypeDecl = false;
|
||||
}
|
||||
final java.io.Writer writer = m_writer;
|
||||
final Writer writer = m_writer;
|
||||
if (!m_inDoctype)
|
||||
writer.write("]>");
|
||||
else
|
||||
@ -2598,15 +2542,12 @@ abstract public class ToStream extends SerializerBase
|
||||
* OutputProperties. Eventually this method should go away and a call
|
||||
* to setCdataSectionElements(ArrayList<String> v) should be made directly.
|
||||
*/
|
||||
private void setCdataSectionElements(String key, Properties props)
|
||||
{
|
||||
|
||||
private void setCdataSectionElements(String key, Properties props) {
|
||||
String s = props.getProperty(key);
|
||||
|
||||
if (null != s)
|
||||
{
|
||||
if (null != s) {
|
||||
// ArrayList<String> of URI/LocalName pairs
|
||||
ArrayList<String> v = new ArrayList<>();
|
||||
ArrayList<String> al = new ArrayList<>();
|
||||
int l = s.length();
|
||||
boolean inCurly = false;
|
||||
StringBuilder buf = new StringBuilder();
|
||||
@ -2624,7 +2565,7 @@ abstract public class ToStream extends SerializerBase
|
||||
{
|
||||
if (buf.length() > 0)
|
||||
{
|
||||
addCdataSectionElement(buf.toString(), v);
|
||||
addCdataSectionElement(buf.toString(), al);
|
||||
buf.setLength(0);
|
||||
}
|
||||
continue;
|
||||
@ -2640,11 +2581,11 @@ abstract public class ToStream extends SerializerBase
|
||||
|
||||
if (buf.length() > 0)
|
||||
{
|
||||
addCdataSectionElement(buf.toString(), v);
|
||||
addCdataSectionElement(buf.toString(), al);
|
||||
buf.setLength(0);
|
||||
}
|
||||
// call the official, public method to set the collected names
|
||||
setCdataSectionElements(v);
|
||||
setCdataSectionElements(al);
|
||||
}
|
||||
|
||||
}
|
||||
@ -2656,25 +2597,19 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @return a QName object
|
||||
*/
|
||||
private void addCdataSectionElement(String URI_and_localName, ArrayList<String> v)
|
||||
{
|
||||
|
||||
StringTokenizer tokenizer =
|
||||
new StringTokenizer(URI_and_localName, "{}", false);
|
||||
private void addCdataSectionElement(String URI_and_localName, ArrayList<String> al) {
|
||||
StringTokenizer tokenizer = new StringTokenizer(URI_and_localName, "{}", false);
|
||||
String s1 = tokenizer.nextToken();
|
||||
String s2 = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
|
||||
|
||||
if (null == s2)
|
||||
{
|
||||
if (null == s2) {
|
||||
// add null URI and the local name
|
||||
v.add(null);
|
||||
v.add(s1);
|
||||
}
|
||||
else
|
||||
{
|
||||
al.add(null);
|
||||
al.add(s1);
|
||||
} else {
|
||||
// add URI, then local name
|
||||
v.add(s1);
|
||||
v.add(s2);
|
||||
al.add(s1);
|
||||
al.add(s2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2685,25 +2620,20 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @param URI_and_localNames an ArrayList of pairs of Strings (URI/local)
|
||||
*/
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
|
||||
{
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames) {
|
||||
// convert to the new way.
|
||||
if (URI_and_localNames != null)
|
||||
{
|
||||
if (URI_and_localNames != null) {
|
||||
final int len = URI_and_localNames.size() - 1;
|
||||
if (len > 0)
|
||||
{
|
||||
if (len > 0) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < len; i += 2)
|
||||
{
|
||||
for (int i = 0; i < len; i += 2) {
|
||||
// whitspace separated "{uri1}local1 {uri2}local2 ..."
|
||||
if (i != 0)
|
||||
sb.append(' ');
|
||||
final String uri = (String) URI_and_localNames.get(i);
|
||||
final String localName =
|
||||
(String) URI_and_localNames.get(i + 1);
|
||||
if (uri != null)
|
||||
{
|
||||
if (uri != null) {
|
||||
// If there is no URI don't put this in, just the localName then.
|
||||
sb.append('{');
|
||||
sb.append(uri);
|
||||
@ -3007,25 +2937,19 @@ abstract public class ToStream extends SerializerBase
|
||||
* exist. This method should be called everytime an attribute is added,
|
||||
* or when an attribute value is changed, or an element is created.
|
||||
*/
|
||||
|
||||
protected void firePseudoAttributes()
|
||||
{
|
||||
if (m_tracer != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
protected void firePseudoAttributes() {
|
||||
if (m_tracer != null) {
|
||||
try {
|
||||
// flush out the "<elemName" if not already flushed
|
||||
m_writer.flush();
|
||||
|
||||
// make a StringBuffer to write the name="value" pairs to.
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int nAttrs = m_attributes.getLength();
|
||||
if (nAttrs > 0)
|
||||
{
|
||||
if (nAttrs > 0) {
|
||||
// make a writer that internally appends to the same
|
||||
// StringBuffer
|
||||
java.io.Writer writer =
|
||||
new ToStream.WritertoStringBuffer(sb);
|
||||
Writer writer = new ToStream.WritertoStringBuffer(sb);
|
||||
|
||||
processAttributes(writer, nAttrs);
|
||||
// Don't clear the attributes!
|
||||
@ -3042,13 +2966,9 @@ abstract public class ToStream extends SerializerBase
|
||||
ch,
|
||||
0,
|
||||
ch.length);
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
} catch (IOException ioe) {
|
||||
// ignore ?
|
||||
}
|
||||
catch (SAXException se)
|
||||
{
|
||||
} catch (SAXException se) {
|
||||
// ignore ?
|
||||
}
|
||||
}
|
||||
@ -3060,41 +2980,35 @@ abstract public class ToStream extends SerializerBase
|
||||
* In this manner trace events, and the real writing of attributes will use
|
||||
* the same code.
|
||||
*/
|
||||
private class WritertoStringBuffer extends java.io.Writer
|
||||
{
|
||||
private class WritertoStringBuffer extends Writer {
|
||||
final private StringBuffer m_stringbuf;
|
||||
|
||||
/**
|
||||
* @see java.io.Writer#write(char[], int, int)
|
||||
*/
|
||||
WritertoStringBuffer(StringBuffer sb)
|
||||
{
|
||||
WritertoStringBuffer(StringBuffer sb) {
|
||||
m_stringbuf = sb;
|
||||
}
|
||||
|
||||
public void write(char[] arg0, int arg1, int arg2) throws IOException
|
||||
{
|
||||
public void write(char[] arg0, int arg1, int arg2) throws IOException {
|
||||
m_stringbuf.append(arg0, arg1, arg2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.io.Writer#flush()
|
||||
*/
|
||||
public void flush() throws IOException
|
||||
{
|
||||
}
|
||||
public void flush() throws IOException {}
|
||||
|
||||
/**
|
||||
* @see java.io.Writer#close()
|
||||
*/
|
||||
public void close() throws IOException
|
||||
{
|
||||
}
|
||||
public void close() throws IOException {}
|
||||
|
||||
public void write(int i)
|
||||
{
|
||||
public void write(int i) {
|
||||
m_stringbuf.append((char) i);
|
||||
}
|
||||
|
||||
public void write(String s)
|
||||
{
|
||||
public void write(String s) {
|
||||
m_stringbuf.append(s);
|
||||
}
|
||||
}
|
||||
@ -3104,12 +3018,11 @@ abstract public class ToStream extends SerializerBase
|
||||
*/
|
||||
public void setTransformer(Transformer transformer) {
|
||||
super.setTransformer(transformer);
|
||||
if (m_tracer != null
|
||||
&& !(m_writer instanceof SerializerTraceWriter) )
|
||||
if (m_tracer != null && !(m_writer instanceof SerializerTraceWriter)) {
|
||||
m_writer = new SerializerTraceWriter(m_writer, m_tracer);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Try's to reset the super class and reset this class for
|
||||
* re-use, so that you don't need to create a new serializer
|
||||
@ -3117,11 +3030,9 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @return true if the class was successfuly reset.
|
||||
*/
|
||||
public boolean reset()
|
||||
{
|
||||
public boolean reset() {
|
||||
boolean wasReset = false;
|
||||
if (super.reset())
|
||||
{
|
||||
if (super.reset()) {
|
||||
resetToStream();
|
||||
wasReset = true;
|
||||
}
|
||||
@ -3132,14 +3043,12 @@ abstract public class ToStream extends SerializerBase
|
||||
* Reset all of the fields owned by ToStream class
|
||||
*
|
||||
*/
|
||||
private void resetToStream()
|
||||
{
|
||||
private void resetToStream() {
|
||||
this.m_cdataStartCalled = false;
|
||||
/* The stream is being reset. It is one of
|
||||
* ToXMLStream, ToHTMLStream ... and this type can't be changed
|
||||
* so neither should m_charInfo which is associated with the
|
||||
* type of Stream. Just leave m_charInfo as-is for the next re-use.
|
||||
*
|
||||
*/
|
||||
// this.m_charInfo = null; // don't set to null
|
||||
|
||||
@ -3183,173 +3092,150 @@ abstract public class ToStream extends SerializerBase
|
||||
*
|
||||
* @xsl.usage internal
|
||||
*/
|
||||
static final class BoolStack
|
||||
{
|
||||
static final class BoolStack {
|
||||
/** Array of boolean values */
|
||||
private boolean m_values[];
|
||||
|
||||
/** Array of boolean values */
|
||||
private boolean m_values[];
|
||||
/** Array size allocated */
|
||||
private int m_allocatedSize;
|
||||
|
||||
/** Array size allocated */
|
||||
private int m_allocatedSize;
|
||||
/** Index into the array of booleans */
|
||||
private int m_index;
|
||||
|
||||
/** Index into the array of booleans */
|
||||
private int m_index;
|
||||
/**
|
||||
* Default constructor. Note that the default
|
||||
* block size is very small, for small lists.
|
||||
*/
|
||||
public BoolStack() {
|
||||
this(32);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default constructor. Note that the default
|
||||
* block size is very small, for small lists.
|
||||
*/
|
||||
public BoolStack()
|
||||
{
|
||||
this(32);
|
||||
}
|
||||
/**
|
||||
* Construct a IntVector, using the given block size.
|
||||
*
|
||||
* @param size array size to allocate
|
||||
*/
|
||||
public BoolStack(int size) {
|
||||
m_allocatedSize = size;
|
||||
m_values = new boolean[size];
|
||||
m_index = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a IntVector, using the given block size.
|
||||
*
|
||||
* @param size array size to allocate
|
||||
*/
|
||||
public BoolStack(int size)
|
||||
{
|
||||
/**
|
||||
* Get the length of the list.
|
||||
*
|
||||
* @return Current length of the list
|
||||
*/
|
||||
public final int size() {
|
||||
return m_index + 1;
|
||||
}
|
||||
|
||||
m_allocatedSize = size;
|
||||
m_values = new boolean[size];
|
||||
m_index = -1;
|
||||
}
|
||||
/**
|
||||
* Clears the stack.
|
||||
*
|
||||
*/
|
||||
public final void clear() {
|
||||
m_index = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the length of the list.
|
||||
*
|
||||
* @return Current length of the list
|
||||
*/
|
||||
public final int size()
|
||||
{
|
||||
return m_index + 1;
|
||||
}
|
||||
/**
|
||||
* Pushes an item onto the top of this stack.
|
||||
*
|
||||
*
|
||||
* @param val the boolean to be pushed onto this stack.
|
||||
* @return the <code>item</code> argument.
|
||||
*/
|
||||
public final boolean push(boolean val) {
|
||||
if (m_index == m_allocatedSize - 1)
|
||||
grow();
|
||||
|
||||
/**
|
||||
* Clears the stack.
|
||||
*
|
||||
*/
|
||||
public final void clear()
|
||||
{
|
||||
m_index = -1;
|
||||
}
|
||||
return (m_values[++m_index] = val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pushes an item onto the top of this stack.
|
||||
*
|
||||
*
|
||||
* @param val the boolean to be pushed onto this stack.
|
||||
* @return the <code>item</code> argument.
|
||||
*/
|
||||
public final boolean push(boolean val)
|
||||
{
|
||||
/**
|
||||
* Removes the object at the top of this stack and returns that
|
||||
* object as the value of this function.
|
||||
*
|
||||
* @return The object at the top of this stack.
|
||||
* @throws EmptyStackException if this stack is empty.
|
||||
*/
|
||||
public final boolean pop() {
|
||||
return m_values[m_index--];
|
||||
}
|
||||
|
||||
if (m_index == m_allocatedSize - 1)
|
||||
grow();
|
||||
/**
|
||||
* Removes the object at the top of this stack and returns the
|
||||
* next object at the top as the value of this function.
|
||||
*
|
||||
*
|
||||
* @return Next object to the top or false if none there
|
||||
*/
|
||||
public final boolean popAndTop() {
|
||||
m_index--;
|
||||
return (m_index >= 0) ? m_values[m_index] : false;
|
||||
}
|
||||
|
||||
return (m_values[++m_index] = val);
|
||||
}
|
||||
/**
|
||||
* Set the item at the top of this stack
|
||||
*
|
||||
*
|
||||
* @param b Object to set at the top of this stack
|
||||
*/
|
||||
public final void setTop(boolean b) {
|
||||
m_values[m_index] = b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the object at the top of this stack and returns that
|
||||
* object as the value of this function.
|
||||
*
|
||||
* @return The object at the top of this stack.
|
||||
* @throws EmptyStackException if this stack is empty.
|
||||
*/
|
||||
public final boolean pop()
|
||||
{
|
||||
return m_values[m_index--];
|
||||
}
|
||||
/**
|
||||
* Looks at the object at the top of this stack without removing it
|
||||
* from the stack.
|
||||
*
|
||||
* @return the object at the top of this stack.
|
||||
* @throws EmptyStackException if this stack is empty.
|
||||
*/
|
||||
public final boolean peek() {
|
||||
return m_values[m_index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the object at the top of this stack and returns the
|
||||
* next object at the top as the value of this function.
|
||||
*
|
||||
*
|
||||
* @return Next object to the top or false if none there
|
||||
*/
|
||||
public final boolean popAndTop()
|
||||
{
|
||||
/**
|
||||
* Looks at the object at the top of this stack without removing it
|
||||
* from the stack. If the stack is empty, it returns false.
|
||||
*
|
||||
* @return the object at the top of this stack.
|
||||
*/
|
||||
public final boolean peekOrFalse() {
|
||||
return (m_index > -1) ? m_values[m_index] : false;
|
||||
}
|
||||
|
||||
m_index--;
|
||||
/**
|
||||
* Looks at the object at the top of this stack without removing it
|
||||
* from the stack. If the stack is empty, it returns true.
|
||||
*
|
||||
* @return the object at the top of this stack.
|
||||
*/
|
||||
public final boolean peekOrTrue() {
|
||||
return (m_index > -1) ? m_values[m_index] : true;
|
||||
}
|
||||
|
||||
return (m_index >= 0) ? m_values[m_index] : false;
|
||||
}
|
||||
/**
|
||||
* Tests if this stack is empty.
|
||||
*
|
||||
* @return <code>true</code> if this stack is empty;
|
||||
* <code>false</code> otherwise.
|
||||
*/
|
||||
public boolean isEmpty() {
|
||||
return (m_index == -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the item at the top of this stack
|
||||
*
|
||||
*
|
||||
* @param b Object to set at the top of this stack
|
||||
*/
|
||||
public final void setTop(boolean b)
|
||||
{
|
||||
m_values[m_index] = b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks at the object at the top of this stack without removing it
|
||||
* from the stack.
|
||||
*
|
||||
* @return the object at the top of this stack.
|
||||
* @throws EmptyStackException if this stack is empty.
|
||||
*/
|
||||
public final boolean peek()
|
||||
{
|
||||
return m_values[m_index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks at the object at the top of this stack without removing it
|
||||
* from the stack. If the stack is empty, it returns false.
|
||||
*
|
||||
* @return the object at the top of this stack.
|
||||
*/
|
||||
public final boolean peekOrFalse()
|
||||
{
|
||||
return (m_index > -1) ? m_values[m_index] : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks at the object at the top of this stack without removing it
|
||||
* from the stack. If the stack is empty, it returns true.
|
||||
*
|
||||
* @return the object at the top of this stack.
|
||||
*/
|
||||
public final boolean peekOrTrue()
|
||||
{
|
||||
return (m_index > -1) ? m_values[m_index] : true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if this stack is empty.
|
||||
*
|
||||
* @return <code>true</code> if this stack is empty;
|
||||
* <code>false</code> otherwise.
|
||||
*/
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return (m_index == -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Grows the size of the stack
|
||||
*
|
||||
*/
|
||||
private void grow()
|
||||
{
|
||||
|
||||
m_allocatedSize *= 2;
|
||||
|
||||
boolean newVector[] = new boolean[m_allocatedSize];
|
||||
|
||||
System.arraycopy(m_values, 0, newVector, 0, m_index + 1);
|
||||
|
||||
m_values = newVector;
|
||||
}
|
||||
/**
|
||||
* Grows the size of the stack
|
||||
*
|
||||
*/
|
||||
private void grow() {
|
||||
m_allocatedSize *= 2;
|
||||
boolean newVector[] = new boolean[m_allocatedSize];
|
||||
System.arraycopy(m_values, 0, newVector, 0, m_index + 1);
|
||||
m_values = newVector;
|
||||
}
|
||||
}
|
||||
|
||||
// Implement DTDHandler
|
||||
@ -3421,14 +3307,12 @@ abstract public class ToStream extends SerializerBase
|
||||
* @throws IOException
|
||||
*/
|
||||
private void DTDprolog() throws SAXException, IOException {
|
||||
final java.io.Writer writer = m_writer;
|
||||
if (m_needToOutputDocTypeDecl)
|
||||
{
|
||||
final Writer writer = m_writer;
|
||||
if (m_needToOutputDocTypeDecl) {
|
||||
outputDocTypeDecl(m_elemContext.m_elementName, false);
|
||||
m_needToOutputDocTypeDecl = false;
|
||||
}
|
||||
if (m_inDoctype)
|
||||
{
|
||||
if (m_inDoctype) {
|
||||
writer.write(" [");
|
||||
writer.write(m_lineSep, 0, m_lineSepLen);
|
||||
m_inDoctype = false;
|
||||
|
@ -1,13 +1,13 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
/*
|
||||
* Copyright 1999-2004 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed 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
|
||||
* 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
|
||||
*
|
||||
@ -17,9 +17,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
* $Id: ToUnknownStream.java,v 1.3 2005/09/28 13:49:08 pvedula Exp $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.serializer;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -27,17 +25,14 @@ import java.io.OutputStream;
|
||||
import java.io.Writer;
|
||||
import java.util.Properties;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.xml.transform.SourceLocator;
|
||||
import javax.xml.transform.Transformer;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.Locator;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
|
||||
/**
|
||||
*This class wraps another SerializationHandler. The wrapped object will either
|
||||
* handler XML or HTML, which is not known until a little later when the first XML
|
||||
@ -55,7 +50,6 @@ import org.xml.sax.SAXException;
|
||||
*/
|
||||
public final class ToUnknownStream extends SerializerBase
|
||||
{
|
||||
|
||||
/**
|
||||
* The wrapped handler, initially XML but possibly switched to HTML
|
||||
*/
|
||||
@ -71,11 +65,11 @@ public final class ToUnknownStream extends SerializerBase
|
||||
*/
|
||||
private boolean m_wrapped_handler_not_initialized = false;
|
||||
|
||||
|
||||
/**
|
||||
* the prefix of the very first tag in the document
|
||||
*/
|
||||
private String m_firstElementPrefix;
|
||||
|
||||
/**
|
||||
* the element name (including any prefix) of the very first tag in the document
|
||||
*/
|
||||
@ -101,6 +95,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* _namespacePrefix has the matching prefix for these URI's
|
||||
*/
|
||||
private ArrayList<String> m_namespaceURI = null;
|
||||
|
||||
/**
|
||||
* A collection of namespace Prefix (only for first element)
|
||||
* _namespaceURI has the matching URIs for these prefix'
|
||||
@ -112,34 +107,13 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* was initialized
|
||||
*/
|
||||
private boolean m_needToCallStartDocument = false;
|
||||
/**
|
||||
* true if setVersion() was called before the underlying handler
|
||||
* was initialized
|
||||
*/
|
||||
private boolean m_setVersion_called = false;
|
||||
/**
|
||||
* true if setDoctypeSystem() was called before the underlying handler
|
||||
* was initialized
|
||||
*/
|
||||
private boolean m_setDoctypeSystem_called = false;
|
||||
/**
|
||||
* true if setDoctypePublic() was called before the underlying handler
|
||||
* was initialized
|
||||
*/
|
||||
private boolean m_setDoctypePublic_called = false;
|
||||
/**
|
||||
* true if setMediaType() was called before the underlying handler
|
||||
* was initialized
|
||||
*/
|
||||
private boolean m_setMediaType_called = false;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
* Initially this object wraps an XML Stream object, so _handler is never null.
|
||||
* That may change later to an HTML Stream object.
|
||||
*/
|
||||
public ToUnknownStream()
|
||||
{
|
||||
public ToUnknownStream() {
|
||||
m_handler = new ToXMLStream();
|
||||
}
|
||||
|
||||
@ -147,8 +121,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @see Serializer#asContentHandler()
|
||||
* @return the wrapped XML or HTML handler
|
||||
*/
|
||||
public ContentHandler asContentHandler() throws IOException
|
||||
{
|
||||
public ContentHandler asContentHandler() throws IOException {
|
||||
/* don't return the real handler ( m_handler ) because
|
||||
* that would expose the real handler to the outside.
|
||||
* Keep m_handler private so it can be internally swapped
|
||||
@ -160,8 +133,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
/**
|
||||
* @see SerializationHandler#close()
|
||||
*/
|
||||
public void close()
|
||||
{
|
||||
public void close() {
|
||||
m_handler.close();
|
||||
}
|
||||
|
||||
@ -169,8 +141,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @see Serializer#getOutputFormat()
|
||||
* @return the properties of the underlying handler
|
||||
*/
|
||||
public Properties getOutputFormat()
|
||||
{
|
||||
public Properties getOutputFormat() {
|
||||
return m_handler.getOutputFormat();
|
||||
}
|
||||
|
||||
@ -178,8 +149,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @see Serializer#getOutputStream()
|
||||
* @return the OutputStream of the underlying XML or HTML handler
|
||||
*/
|
||||
public OutputStream getOutputStream()
|
||||
{
|
||||
public OutputStream getOutputStream() {
|
||||
return m_handler.getOutputStream();
|
||||
}
|
||||
|
||||
@ -187,8 +157,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @see Serializer#getWriter()
|
||||
* @return the Writer of the underlying XML or HTML handler
|
||||
*/
|
||||
public Writer getWriter()
|
||||
{
|
||||
public Writer getWriter() {
|
||||
return m_handler.getWriter();
|
||||
}
|
||||
|
||||
@ -197,8 +166,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @see Serializer#reset()
|
||||
* @return ???
|
||||
*/
|
||||
public boolean reset()
|
||||
{
|
||||
public boolean reset() {
|
||||
return m_handler.reset();
|
||||
}
|
||||
|
||||
@ -208,10 +176,8 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @see DOMSerializer#serialize(Node)
|
||||
*
|
||||
*/
|
||||
public void serialize(Node node) throws IOException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
public void serialize(Node node) throws IOException {
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.serialize(node);
|
||||
@ -220,8 +186,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
/**
|
||||
* @see SerializationHandler#setEscaping(boolean)
|
||||
*/
|
||||
public boolean setEscaping(boolean escape) throws SAXException
|
||||
{
|
||||
public boolean setEscaping(boolean escape) throws SAXException {
|
||||
return m_handler.setEscaping(escape);
|
||||
}
|
||||
|
||||
@ -230,8 +195,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param format the output properties to set
|
||||
* @see Serializer#setOutputFormat(Properties)
|
||||
*/
|
||||
public void setOutputFormat(Properties format)
|
||||
{
|
||||
public void setOutputFormat(Properties format) {
|
||||
m_handler.setOutputFormat(format);
|
||||
}
|
||||
|
||||
@ -240,8 +204,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param output the OutputStream to write to
|
||||
* @see Serializer#setOutputStream(OutputStream)
|
||||
*/
|
||||
public void setOutputStream(OutputStream output)
|
||||
{
|
||||
public void setOutputStream(OutputStream output) {
|
||||
m_handler.setOutputStream(output);
|
||||
}
|
||||
|
||||
@ -250,8 +213,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param writer the writer to write to
|
||||
* @see Serializer#setWriter(Writer)
|
||||
*/
|
||||
public void setWriter(Writer writer)
|
||||
{
|
||||
public void setWriter(Writer writer) {
|
||||
m_handler.setWriter(writer);
|
||||
}
|
||||
|
||||
@ -265,12 +227,8 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param XSLAttribute true if this attribute is coming from an xsl:attribute element
|
||||
* @see ExtendedContentHandler#addAttribute(String, String, String, String, String)
|
||||
*/
|
||||
public void addAttribute(
|
||||
String uri,
|
||||
String localName,
|
||||
String rawName,
|
||||
String type,
|
||||
String value)
|
||||
public void addAttribute(String uri, String localName, String rawName,
|
||||
String type, String value)
|
||||
throws SAXException
|
||||
{
|
||||
addAttribute(uri, localName, rawName, type, value, false);
|
||||
@ -286,35 +244,27 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param XSLAttribute true if this attribute is coming from an xsl:attribute element
|
||||
* @see ExtendedContentHandler#addAttribute(String, String, String, String, String)
|
||||
*/
|
||||
public void addAttribute(
|
||||
String uri,
|
||||
String localName,
|
||||
String rawName,
|
||||
String type,
|
||||
String value,
|
||||
boolean XSLAttribute)
|
||||
public void addAttribute(String uri, String localName, String rawName,
|
||||
String type, String value, boolean XSLAttribute)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.addAttribute(uri, localName, rawName, type, value, XSLAttribute);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an attribute to the currenly open tag
|
||||
* @param rawName the attribute name, with prefix (if any)
|
||||
* @param value the value of the parameter
|
||||
* @see ExtendedContentHandler#addAttribute(String, String)
|
||||
*/
|
||||
public void addAttribute(String rawName, String value)
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
public void addAttribute(String rawName, String value) {
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.addAttribute(rawName, value);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -323,52 +273,50 @@ public final class ToUnknownStream extends SerializerBase
|
||||
public void addUniqueAttribute(String rawName, String value, int flags)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.addUniqueAttribute(rawName, value, flags);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the String to a character array and calls the SAX method
|
||||
* characters(char[],int,int);
|
||||
*
|
||||
* @param chars The string of characters to process.
|
||||
*
|
||||
* @throws org.xml.sax.SAXException
|
||||
*
|
||||
* @see ExtendedContentHandler#characters(String)
|
||||
*/
|
||||
public void characters(String chars) throws SAXException
|
||||
{
|
||||
final int length = chars.length();
|
||||
if (length > m_charsBuff.length)
|
||||
{
|
||||
m_charsBuff = new char[length*2 + 1];
|
||||
public void characters(String chars) throws SAXException {
|
||||
final int len = (chars == null) ? 0 : chars.length();
|
||||
if (len > m_charsBuff.length) {
|
||||
m_charsBuff = new char[len * 2 + 1];
|
||||
}
|
||||
chars.getChars(0, length, m_charsBuff, 0);
|
||||
this.characters(m_charsBuff, 0, length);
|
||||
if (len > 0) {
|
||||
chars.getChars(0, len, m_charsBuff, 0);
|
||||
}
|
||||
this.characters(m_charsBuff, 0, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass the call on to the underlying handler
|
||||
* @see ExtendedContentHandler#endElement(String)
|
||||
*/
|
||||
public void endElement(String elementName) throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
public void endElement(String elementName) throws SAXException {
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.endElement(elementName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#startPrefixMapping(String, String)
|
||||
* @param prefix The prefix that maps to the URI
|
||||
* @param uri The URI for the namespace
|
||||
*/
|
||||
public void startPrefixMapping(String prefix, String uri) throws SAXException
|
||||
{
|
||||
public void startPrefixMapping(String prefix, String uri) throws SAXException {
|
||||
this.startPrefixMapping(prefix,uri, true);
|
||||
}
|
||||
|
||||
@ -387,11 +335,12 @@ public final class ToUnknownStream extends SerializerBase
|
||||
throws SAXException
|
||||
{
|
||||
// hack for XSLTC with finding URI for default namespace
|
||||
if (m_firstTagNotEmitted && m_firstElementURI == null && m_firstElementName != null)
|
||||
if (m_firstTagNotEmitted &&
|
||||
m_firstElementURI == null &&
|
||||
m_firstElementName != null)
|
||||
{
|
||||
String prefix1 = getPrefixPart(m_firstElementName);
|
||||
if (prefix1 == null && EMPTYSTRING.equals(prefix))
|
||||
{
|
||||
if (prefix1 == null && EMPTYSTRING.equals(prefix)) {
|
||||
// the elements URI is not known yet, and it
|
||||
// doesn't have a prefix, and we are currently
|
||||
// setting the uri for prefix "", so we have
|
||||
@ -399,45 +348,36 @@ public final class ToUnknownStream extends SerializerBase
|
||||
m_firstElementURI = uri;
|
||||
}
|
||||
}
|
||||
startPrefixMapping(prefix,uri, false);
|
||||
startPrefixMapping(prefix, uri, false);
|
||||
}
|
||||
|
||||
public boolean startPrefixMapping(String prefix, String uri, boolean shouldFlush)
|
||||
throws SAXException
|
||||
{
|
||||
boolean pushed = false;
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstElementName != null && shouldFlush)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
if (m_firstElementName != null && shouldFlush) {
|
||||
/* we've already seen a startElement, and this is a prefix mapping
|
||||
* for the up coming element, so flush the old element
|
||||
* then send this event on its way.
|
||||
*/
|
||||
flush();
|
||||
pushed = m_handler.startPrefixMapping(prefix, uri, shouldFlush);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_namespacePrefix == null)
|
||||
{
|
||||
} else {
|
||||
if (m_namespacePrefix == null) {
|
||||
m_namespacePrefix = new ArrayList<>();
|
||||
m_namespaceURI = new ArrayList<>();
|
||||
}
|
||||
m_namespacePrefix.add(prefix);
|
||||
m_namespaceURI.add(uri);
|
||||
|
||||
if (m_firstElementURI == null)
|
||||
{
|
||||
if (m_firstElementURI == null) {
|
||||
if (prefix.equals(m_firstElementPrefix))
|
||||
m_firstElementURI = uri;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
pushed = m_handler.startPrefixMapping(prefix, uri, shouldFlush);
|
||||
} else {
|
||||
pushed = m_handler.startPrefixMapping(prefix, uri, shouldFlush);
|
||||
}
|
||||
return pushed;
|
||||
}
|
||||
@ -446,54 +386,39 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* This method cannot be cached because default is different in
|
||||
* HTML and XML (we need more than a boolean).
|
||||
*/
|
||||
|
||||
public void setVersion(String version)
|
||||
{
|
||||
public void setVersion(String version) {
|
||||
m_handler.setVersion(version);
|
||||
|
||||
// Cache call to setVersion()
|
||||
// super.setVersion(version);
|
||||
m_setVersion_called = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.xml.sax.ContentHandler#startDocument()
|
||||
*/
|
||||
public void startDocument() throws SAXException
|
||||
{
|
||||
public void startDocument() throws SAXException {
|
||||
m_needToCallStartDocument = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void startElement(String qName) throws SAXException
|
||||
{
|
||||
public void startElement(String qName) throws SAXException {
|
||||
this.startElement(null, null, qName, null);
|
||||
}
|
||||
|
||||
public void startElement(String namespaceURI, String localName, String qName) throws SAXException
|
||||
{
|
||||
public void startElement(String namespaceURI, String localName,
|
||||
String qName) throws SAXException {
|
||||
this.startElement(namespaceURI, localName, qName, null);
|
||||
}
|
||||
|
||||
public void startElement(
|
||||
String namespaceURI,
|
||||
String localName,
|
||||
String elementName,
|
||||
Attributes atts) throws SAXException
|
||||
public void startElement(String namespaceURI, String localName,
|
||||
String elementName, Attributes atts)
|
||||
throws SAXException
|
||||
{
|
||||
|
||||
if (m_needToCallSetDocumentInfo){
|
||||
if (m_needToCallSetDocumentInfo) {
|
||||
super.setDocumentInfo();
|
||||
m_needToCallSetDocumentInfo = false;
|
||||
}
|
||||
|
||||
/* we are notified of the start of an element */
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
/* we have not yet sent the first element on its way */
|
||||
if (m_firstElementName != null)
|
||||
{
|
||||
if (m_firstElementName != null) {
|
||||
/* this is not the first element, but a later one.
|
||||
* But we have the old element pending, so flush it out,
|
||||
* then send this one on its way.
|
||||
@ -645,16 +570,14 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* Pass the call on to the underlying handler
|
||||
* @see XSLOutputAttributes#getVersion()
|
||||
*/
|
||||
public String getVersion()
|
||||
{
|
||||
public String getVersion() {
|
||||
return m_handler.getVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setDoctype(String, String)
|
||||
*/
|
||||
public void setDoctype(String system, String pub)
|
||||
{
|
||||
public void setDoctype(String system, String pub) {
|
||||
m_handler.setDoctypePublic(pub);
|
||||
m_handler.setDoctypeSystem(system);
|
||||
}
|
||||
@ -665,10 +588,8 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param doctype the public doctype to set
|
||||
* @see XSLOutputAttributes#setDoctypePublic(String)
|
||||
*/
|
||||
public void setDoctypePublic(String doctype)
|
||||
{
|
||||
public void setDoctypePublic(String doctype) {
|
||||
m_handler.setDoctypePublic(doctype);
|
||||
m_setDoctypePublic_called = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -677,18 +598,15 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* @param doctype the system doctype to set
|
||||
* @see XSLOutputAttributes#setDoctypeSystem(String)
|
||||
*/
|
||||
public void setDoctypeSystem(String doctype)
|
||||
{
|
||||
public void setDoctypeSystem(String doctype) {
|
||||
m_handler.setDoctypeSystem(doctype);
|
||||
m_setDoctypeSystem_called = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass the call on to the underlying handler
|
||||
* @see XSLOutputAttributes#setEncoding(String)
|
||||
*/
|
||||
public void setEncoding(String encoding)
|
||||
{
|
||||
public void setEncoding(String encoding) {
|
||||
m_handler.setEncoding(encoding);
|
||||
}
|
||||
|
||||
@ -696,34 +614,29 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* Pass the call on to the underlying handler
|
||||
* @see XSLOutputAttributes#setIndent(boolean)
|
||||
*/
|
||||
public void setIndent(boolean indent)
|
||||
{
|
||||
public void setIndent(boolean indent) {
|
||||
m_handler.setIndent(indent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass the call on to the underlying handler
|
||||
*/
|
||||
public void setIndentAmount(int value)
|
||||
{
|
||||
public void setIndentAmount(int value) {
|
||||
m_handler.setIndentAmount(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setMediaType(String)
|
||||
*/
|
||||
public void setMediaType(String mediaType)
|
||||
{
|
||||
public void setMediaType(String mediaType) {
|
||||
m_handler.setMediaType(mediaType);
|
||||
m_setMediaType_called = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass the call on to the underlying handler
|
||||
* @see XSLOutputAttributes#setOmitXMLDeclaration(boolean)
|
||||
*/
|
||||
public void setOmitXMLDeclaration(boolean b)
|
||||
{
|
||||
public void setOmitXMLDeclaration(boolean b) {
|
||||
m_handler.setOmitXMLDeclaration(b);
|
||||
}
|
||||
|
||||
@ -731,27 +644,16 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* Pass the call on to the underlying handler
|
||||
* @see XSLOutputAttributes#setStandalone(String)
|
||||
*/
|
||||
public void setStandalone(String standalone)
|
||||
{
|
||||
public void setStandalone(String standalone) {
|
||||
m_handler.setStandalone(standalone);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see XSLOutputAttributes#setVersion(String)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Pass the call on to the underlying handler
|
||||
* @see org.xml.sax.ext.DeclHandler#attributeDecl(String, String, String, String, String)
|
||||
*/
|
||||
public void attributeDecl(
|
||||
String arg0,
|
||||
String arg1,
|
||||
String arg2,
|
||||
String arg3,
|
||||
String arg4)
|
||||
throws SAXException
|
||||
{
|
||||
public void attributeDecl(String arg0, String arg1, String arg2,
|
||||
String arg3, String arg4) throws SAXException {
|
||||
m_handler.attributeDecl(arg0, arg1, arg2, arg3, arg4);
|
||||
}
|
||||
|
||||
@ -761,8 +663,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
*/
|
||||
public void elementDecl(String arg0, String arg1) throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
emitFirstTag();
|
||||
}
|
||||
m_handler.elementDecl(arg0, arg1);
|
||||
@ -778,8 +679,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
String systemId)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.externalEntityDecl(name, publicId, systemId);
|
||||
@ -792,8 +692,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
public void internalEntityDecl(String arg0, String arg1)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
m_handler.internalEntityDecl(arg0, arg1);
|
||||
@ -806,29 +705,21 @@ public final class ToUnknownStream extends SerializerBase
|
||||
public void characters(char[] characters, int offset, int length)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
|
||||
m_handler.characters(characters, offset, length);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass the call on to the underlying handler
|
||||
* @see org.xml.sax.ContentHandler#endDocument()
|
||||
*/
|
||||
public void endDocument() throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
public void endDocument() throws SAXException {
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
}
|
||||
|
||||
m_handler.endDocument();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -838,17 +729,14 @@ public final class ToUnknownStream extends SerializerBase
|
||||
public void endElement(String namespaceURI, String localName, String qName)
|
||||
throws SAXException
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
if (m_firstTagNotEmitted) {
|
||||
flush();
|
||||
if (namespaceURI == null && m_firstElementURI != null)
|
||||
namespaceURI = m_firstElementURI;
|
||||
|
||||
|
||||
if (localName == null && m_firstElementLocalName != null)
|
||||
localName = m_firstElementLocalName;
|
||||
}
|
||||
|
||||
m_handler.endElement(namespaceURI, localName, qName);
|
||||
}
|
||||
|
||||
@ -856,8 +744,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* Pass the call on to the underlying handler
|
||||
* @see org.xml.sax.ContentHandler#endPrefixMapping(String)
|
||||
*/
|
||||
public void endPrefixMapping(String prefix) throws SAXException
|
||||
{
|
||||
public void endPrefixMapping(String prefix) throws SAXException {
|
||||
m_handler.endPrefixMapping(prefix);
|
||||
}
|
||||
|
||||
@ -1071,12 +958,9 @@ public final class ToUnknownStream extends SerializerBase
|
||||
m_wrapped_handler_not_initialized = false;
|
||||
}
|
||||
|
||||
private void emitFirstTag() throws SAXException
|
||||
{
|
||||
if (m_firstElementName != null)
|
||||
{
|
||||
if (m_wrapped_handler_not_initialized)
|
||||
{
|
||||
private void emitFirstTag() throws SAXException {
|
||||
if (m_firstElementName != null) {
|
||||
if (m_wrapped_handler_not_initialized) {
|
||||
initStreamOutput();
|
||||
m_wrapped_handler_not_initialized = false;
|
||||
}
|
||||
@ -1086,14 +970,11 @@ public final class ToUnknownStream extends SerializerBase
|
||||
m_attributes = null;
|
||||
|
||||
// Output namespaces of first tag
|
||||
if (m_namespacePrefix != null)
|
||||
{
|
||||
if (m_namespacePrefix != null) {
|
||||
final int n = m_namespacePrefix.size();
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
final String prefix =
|
||||
(String) m_namespacePrefix.get(i);
|
||||
final String uri = (String) m_namespaceURI.get(i);
|
||||
for (int i = 0; i < n; i++) {
|
||||
final String prefix = m_namespacePrefix.get(i);
|
||||
final String uri = m_namespaceURI.get(i);
|
||||
m_handler.startPrefixMapping(prefix, uri, false);
|
||||
}
|
||||
m_namespacePrefix = null;
|
||||
@ -1109,8 +990,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* Don't want to override static function on SerializerBase
|
||||
* So added Unknown suffix to method name.
|
||||
*/
|
||||
private String getLocalNameUnknown(String value)
|
||||
{
|
||||
private String getLocalNameUnknown(String value) {
|
||||
int idx = value.lastIndexOf(':');
|
||||
if (idx >= 0)
|
||||
value = value.substring(idx + 1);
|
||||
@ -1121,13 +1001,12 @@ public final class ToUnknownStream extends SerializerBase
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to return prefix
|
||||
*
|
||||
* Don't want to override static function on SerializerBase
|
||||
* So added Unknown suffix to method name.
|
||||
*/
|
||||
private String getPrefixPartUnknown(String qname)
|
||||
{
|
||||
* Utility function to return prefix
|
||||
*
|
||||
* Don't want to override static function on SerializerBase
|
||||
* So added Unknown suffix to method name.
|
||||
*/
|
||||
private String getPrefixPartUnknown(String qname) {
|
||||
final int index = qname.indexOf(':');
|
||||
return (index > 0) ? qname.substring(0, index) : EMPTYSTRING;
|
||||
}
|
||||
@ -1139,8 +1018,7 @@ public final class ToUnknownStream extends SerializerBase
|
||||
*
|
||||
* @return true if the first element is an opening <html> tag
|
||||
*/
|
||||
private boolean isFirstElemHTML()
|
||||
{
|
||||
private boolean isFirstElemHTML() {
|
||||
boolean isHTML;
|
||||
|
||||
// is the first tag html, not considering the prefix ?
|
||||
@ -1148,29 +1026,27 @@ public final class ToUnknownStream extends SerializerBase
|
||||
getLocalNameUnknown(m_firstElementName).equalsIgnoreCase("html");
|
||||
|
||||
// Try to rule out if this is not to be an HTML document based on URI
|
||||
if (isHTML
|
||||
&& m_firstElementURI != null
|
||||
&& !EMPTYSTRING.equals(m_firstElementURI))
|
||||
if (isHTML &&
|
||||
m_firstElementURI != null &&
|
||||
!EMPTYSTRING.equals(m_firstElementURI))
|
||||
{
|
||||
// the <html> element has a non-trivial namespace
|
||||
isHTML = false;
|
||||
}
|
||||
// Try to rule out if this is an not to be an HTML document based on prefix
|
||||
if (isHTML && m_namespacePrefix != null)
|
||||
{
|
||||
if (isHTML && m_namespacePrefix != null) {
|
||||
/* the first element has a name of "html", but lets check the prefix.
|
||||
* If the prefix points to a namespace with a URL that is not ""
|
||||
* then the doecument doesn't start with an <html> tag, and isn't html
|
||||
*/
|
||||
final int max = m_namespacePrefix.size();
|
||||
for (int i = 0; i < max; i++)
|
||||
{
|
||||
for (int i = 0; i < max; i++) {
|
||||
final String prefix = m_namespacePrefix.get(i);
|
||||
final String uri = m_namespaceURI.get(i);
|
||||
|
||||
if (m_firstElementPrefix != null
|
||||
&& m_firstElementPrefix.equals(prefix)
|
||||
&& !EMPTYSTRING.equals(uri))
|
||||
if (m_firstElementPrefix != null &&
|
||||
m_firstElementPrefix.equals(prefix) &&
|
||||
!EMPTYSTRING.equals(uri))
|
||||
{
|
||||
// The first element has a prefix, so it can't be <html>
|
||||
isHTML = false;
|
||||
@ -1181,11 +1057,11 @@ public final class ToUnknownStream extends SerializerBase
|
||||
}
|
||||
return isHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Serializer#asDOMSerializer()
|
||||
*/
|
||||
public DOMSerializer asDOMSerializer() throws IOException
|
||||
{
|
||||
public DOMSerializer asDOMSerializer() throws IOException {
|
||||
return m_handler.asDOMSerializer();
|
||||
}
|
||||
|
||||
@ -1194,15 +1070,14 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* specified in the cdata-section-elements attribute.
|
||||
* @see SerializationHandler#setCdataSectionElements(java.util.Vector)
|
||||
*/
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames)
|
||||
{
|
||||
public void setCdataSectionElements(ArrayList<String> URI_and_localNames) {
|
||||
m_handler.setCdataSectionElements(URI_and_localNames);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#addAttributes(org.xml.sax.Attributes)
|
||||
*/
|
||||
public void addAttributes(Attributes atts) throws SAXException
|
||||
{
|
||||
public void addAttributes(Attributes atts) throws SAXException {
|
||||
m_handler.addAttributes(atts);
|
||||
}
|
||||
|
||||
@ -1211,98 +1086,83 @@ public final class ToUnknownStream extends SerializerBase
|
||||
* Simply returns the mappings of the wrapped handler.
|
||||
* @see ExtendedContentHandler#getNamespaceMappings()
|
||||
*/
|
||||
public NamespaceMappings getNamespaceMappings()
|
||||
{
|
||||
public NamespaceMappings getNamespaceMappings() {
|
||||
NamespaceMappings mappings = null;
|
||||
if (m_handler != null)
|
||||
{
|
||||
if (m_handler != null) {
|
||||
mappings = m_handler.getNamespaceMappings();
|
||||
}
|
||||
return mappings;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#flushPending()
|
||||
*/
|
||||
public void flushPending() throws SAXException
|
||||
{
|
||||
|
||||
public void flushPending() throws SAXException {
|
||||
flush();
|
||||
|
||||
m_handler.flushPending();
|
||||
}
|
||||
|
||||
private void flush()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (m_firstTagNotEmitted)
|
||||
{
|
||||
emitFirstTag();
|
||||
}
|
||||
if (m_needToCallStartDocument)
|
||||
{
|
||||
m_handler.startDocument();
|
||||
m_needToCallStartDocument = false;
|
||||
}
|
||||
}
|
||||
catch(SAXException e)
|
||||
{
|
||||
private void flush() {
|
||||
try {
|
||||
if (m_firstTagNotEmitted) {
|
||||
emitFirstTag();
|
||||
}
|
||||
if (m_needToCallStartDocument) {
|
||||
m_handler.startDocument();
|
||||
m_needToCallStartDocument = false;
|
||||
}
|
||||
} catch(SAXException e) {
|
||||
throw new RuntimeException(e.toString());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#getPrefix
|
||||
*/
|
||||
public String getPrefix(String namespaceURI)
|
||||
{
|
||||
public String getPrefix(String namespaceURI) {
|
||||
return m_handler.getPrefix(namespaceURI);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#entityReference(java.lang.String)
|
||||
*/
|
||||
public void entityReference(String entityName) throws SAXException
|
||||
{
|
||||
public void entityReference(String entityName) throws SAXException {
|
||||
m_handler.entityReference(entityName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ExtendedContentHandler#getNamespaceURI(java.lang.String, boolean)
|
||||
*/
|
||||
public String getNamespaceURI(String qname, boolean isElement)
|
||||
{
|
||||
public String getNamespaceURI(String qname, boolean isElement) {
|
||||
return m_handler.getNamespaceURI(qname, isElement);
|
||||
}
|
||||
|
||||
public String getNamespaceURIFromPrefix(String prefix)
|
||||
{
|
||||
public String getNamespaceURIFromPrefix(String prefix) {
|
||||
return m_handler.getNamespaceURIFromPrefix(prefix);
|
||||
}
|
||||
|
||||
public void setTransformer(Transformer t)
|
||||
{
|
||||
public void setTransformer(Transformer t) {
|
||||
m_handler.setTransformer(t);
|
||||
if ((t instanceof SerializerTrace) &&
|
||||
(((SerializerTrace) t).hasTraceListeners())) {
|
||||
m_tracer = (SerializerTrace) t;
|
||||
(((SerializerTrace) t).hasTraceListeners()))
|
||||
{
|
||||
m_tracer = (SerializerTrace) t;
|
||||
} else {
|
||||
m_tracer = null;
|
||||
m_tracer = null;
|
||||
}
|
||||
}
|
||||
public Transformer getTransformer()
|
||||
{
|
||||
|
||||
public Transformer getTransformer() {
|
||||
return m_handler.getTransformer();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SerializationHandler#setContentHandler(org.xml.sax.ContentHandler)
|
||||
*/
|
||||
public void setContentHandler(ContentHandler ch)
|
||||
{
|
||||
public void setContentHandler(ContentHandler ch) {
|
||||
m_handler.setContentHandler(ch);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is used to set the source locator, which might be used to
|
||||
* generated an error message.
|
||||
@ -1310,14 +1170,11 @@ public final class ToUnknownStream extends SerializerBase
|
||||
*
|
||||
* @see ExtendedContentHandler#setSourceLocator(javax.xml.transform.SourceLocator)
|
||||
*/
|
||||
public void setSourceLocator(SourceLocator locator)
|
||||
{
|
||||
public void setSourceLocator(SourceLocator locator) {
|
||||
m_handler.setSourceLocator(locator);
|
||||
}
|
||||
|
||||
protected void firePseudoElement(String elementName)
|
||||
{
|
||||
|
||||
protected void firePseudoElement(String elementName) {
|
||||
if (m_tracer != null) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
|
||||
|
@ -3,13 +3,12 @@
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
*/
|
||||
/*
|
||||
* 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
|
||||
* 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
|
||||
*
|
||||
@ -19,9 +18,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
* $Id: XSLOutputAttributes.java,v 1.2.4.1 2005/09/15 08:15:32 suresh_emailid Exp $
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xml.internal.serializer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -55,8 +52,7 @@ import java.util.ArrayList;
|
||||
*
|
||||
* @xsl.usage internal
|
||||
*/
|
||||
interface XSLOutputAttributes
|
||||
{
|
||||
interface XSLOutputAttributes {
|
||||
/**
|
||||
* Returns the previously set value of the value to be used as the public
|
||||
* identifier in the document type declaration (DTD).
|
||||
@ -65,6 +61,7 @@ interface XSLOutputAttributes
|
||||
* output document.
|
||||
*/
|
||||
public String getDoctypePublic();
|
||||
|
||||
/**
|
||||
* Returns the previously set value of the value to be used
|
||||
* as the system identifier in the document type declaration (DTD).
|
||||
@ -73,13 +70,15 @@ interface XSLOutputAttributes
|
||||
*
|
||||
*/
|
||||
public String getDoctypeSystem();
|
||||
|
||||
/**
|
||||
* @return the character encoding to be used in the output document.
|
||||
*/
|
||||
public String getEncoding();
|
||||
|
||||
/**
|
||||
* @return true if the output document should be indented to visually
|
||||
* indicate its structure.
|
||||
* @return true if the output document should be indented to visually
|
||||
* indicate its structure.
|
||||
*/
|
||||
public boolean getIndent();
|
||||
|
||||
@ -87,21 +86,25 @@ interface XSLOutputAttributes
|
||||
* @return the number of spaces to indent for each indentation level.
|
||||
*/
|
||||
public int getIndentAmount();
|
||||
|
||||
/**
|
||||
* @return the mediatype the media-type or MIME type associated with the
|
||||
* output document.
|
||||
*/
|
||||
public String getMediaType();
|
||||
|
||||
/**
|
||||
* @return true if the XML declaration is to be omitted from the output
|
||||
* document.
|
||||
*/
|
||||
public boolean getOmitXMLDeclaration();
|
||||
|
||||
/**
|
||||
* @return a value of "yes" if the <code>standalone</code> delaration is to
|
||||
* be included in the output document.
|
||||
*/
|
||||
* @return a value of "yes" if the <code>standalone</code> delaration is to
|
||||
* be included in the output document.
|
||||
*/
|
||||
public String getStandalone();
|
||||
|
||||
/**
|
||||
* @return the version of the output format.
|
||||
*/
|
||||
@ -132,20 +135,23 @@ interface XSLOutputAttributes
|
||||
public void setDoctype(String system, String pub);
|
||||
|
||||
/** Set the value coming from the xsl:output doctype-public stylesheet attribute.
|
||||
* @param doctype the public identifier to be used in the DOCTYPE
|
||||
* declaration in the output document.
|
||||
*/
|
||||
* @param doctype the public identifier to be used in the DOCTYPE
|
||||
* declaration in the output document.
|
||||
*/
|
||||
public void setDoctypePublic(String doctype);
|
||||
|
||||
/** Set the value coming from the xsl:output doctype-system stylesheet attribute.
|
||||
* @param doctype the system identifier to be used in the DOCTYPE
|
||||
* declaration in the output document.
|
||||
*/
|
||||
* @param doctype the system identifier to be used in the DOCTYPE
|
||||
* declaration in the output document.
|
||||
*/
|
||||
public void setDoctypeSystem(String doctype);
|
||||
|
||||
/**
|
||||
* Sets the character encoding coming from the xsl:output encoding stylesheet attribute.
|
||||
* @param encoding the character encoding
|
||||
*/
|
||||
public void setEncoding(String encoding);
|
||||
|
||||
/**
|
||||
* Sets the value coming from the xsl:output indent stylesheet
|
||||
* attribute.
|
||||
@ -153,18 +159,21 @@ interface XSLOutputAttributes
|
||||
* indicate its structure.
|
||||
*/
|
||||
public void setIndent(boolean indent);
|
||||
|
||||
/**
|
||||
* Sets the value coming from the xsl:output media-type stylesheet attribute.
|
||||
* @param mediatype the media-type or MIME type associated with the output
|
||||
* document.
|
||||
*/
|
||||
public void setMediaType(String mediatype);
|
||||
|
||||
/**
|
||||
* Sets the value coming from the xsl:output omit-xml-declaration stylesheet attribute
|
||||
* @param b true if the XML declaration is to be omitted from the output
|
||||
* document.
|
||||
*/
|
||||
public void setOmitXMLDeclaration(boolean b);
|
||||
|
||||
/**
|
||||
* Sets the value coming from the xsl:output standalone stylesheet attribute.
|
||||
* @param standalone a value of "yes" indicates that the
|
||||
@ -172,6 +181,7 @@ interface XSLOutputAttributes
|
||||
* document.
|
||||
*/
|
||||
public void setStandalone(String standalone);
|
||||
|
||||
/**
|
||||
* Sets the value coming from the xsl:output version attribute.
|
||||
* @param version the version of the output format.
|
||||
@ -194,6 +204,7 @@ interface XSLOutputAttributes
|
||||
* @return The value of the parameter
|
||||
*/
|
||||
public String getOutputProperty(String name);
|
||||
|
||||
/**
|
||||
* Get the default value for a property that affects seraialization,
|
||||
* or null if there is none. It is possible that a non-default value
|
||||
@ -203,6 +214,7 @@ interface XSLOutputAttributes
|
||||
* @return The default value of the parameter, or null if there is no default value.
|
||||
*/
|
||||
public String getOutputPropertyDefault(String name);
|
||||
|
||||
/**
|
||||
* Set the non-default value for a property that affects seraialization.
|
||||
* @param name The name of the property, which is just the local name
|
||||
@ -216,7 +228,7 @@ interface XSLOutputAttributes
|
||||
* </ul>
|
||||
* @val The non-default value of the parameter
|
||||
*/
|
||||
public void setOutputProperty(String name, String val);
|
||||
public void setOutputProperty(String name, String val);
|
||||
|
||||
/**
|
||||
* Set the default value for a property that affects seraialization.
|
||||
@ -231,5 +243,5 @@ interface XSLOutputAttributes
|
||||
* </ul>
|
||||
* @val The default value of the parameter
|
||||
*/
|
||||
public void setOutputPropertyDefault(String name, String val);
|
||||
public void setOutputPropertyDefault(String name, String val);
|
||||
}
|
||||
|
@ -81,6 +81,8 @@ public class XMLReaderManager {
|
||||
private boolean _useCatalog;
|
||||
private CatalogFeatures _catalogFeatures;
|
||||
|
||||
private int _cdataChunkSize;
|
||||
|
||||
/**
|
||||
* Hidden constructor
|
||||
*/
|
||||
@ -173,13 +175,12 @@ public class XMLReaderManager {
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
//reader is cached, but this property might have been reset
|
||||
reader.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, _accessExternalDTD);
|
||||
} catch (SAXException se) {
|
||||
XMLSecurityManager.printWarning(reader.getClass().getName(),
|
||||
XMLConstants.ACCESS_EXTERNAL_DTD, se);
|
||||
}
|
||||
//reader is cached, but this property might have been reset
|
||||
JdkXmlUtils.setXMLReaderPropertyIfSupport(reader, XMLConstants.ACCESS_EXTERNAL_DTD,
|
||||
_accessExternalDTD, true);
|
||||
|
||||
JdkXmlUtils.setXMLReaderPropertyIfSupport(reader, JdkXmlUtils.CDATA_CHUNK_SIZE,
|
||||
_cdataChunkSize, false);
|
||||
|
||||
String lastProperty = "";
|
||||
try {
|
||||
@ -278,7 +279,8 @@ public class XMLReaderManager {
|
||||
_xmlSecurityManager = (XMLSecurityManager)value;
|
||||
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
|
||||
_catalogFeatures = (CatalogFeatures)value;
|
||||
} else if (JdkXmlUtils.CDATA_CHUNK_SIZE.equals(name)) {
|
||||
_cdataChunkSize = JdkXmlUtils.getValue(value, _cdataChunkSize);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
package jdk.xml.internal;
|
||||
|
||||
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
|
||||
import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
|
||||
@ -39,6 +40,7 @@ import org.xml.sax.XMLReader;
|
||||
* Constants for use across JAXP processors.
|
||||
*/
|
||||
public class JdkXmlUtils {
|
||||
|
||||
/**
|
||||
* Catalog features
|
||||
*/
|
||||
@ -58,11 +60,63 @@ public class JdkXmlUtils {
|
||||
/**
|
||||
* Default value of USE_CATALOG. This will read the System property
|
||||
*/
|
||||
public static final boolean USE_CATALOG_DEFAULT =
|
||||
SecuritySupport.getJAXPSystemProperty(SP_USE_CATALOG, true);
|
||||
public static final boolean USE_CATALOG_DEFAULT
|
||||
= SecuritySupport.getJAXPSystemProperty(Boolean.class, SP_USE_CATALOG, "true");
|
||||
|
||||
/**
|
||||
* JDK features (will be consolidated in the next major feature revamp
|
||||
*/
|
||||
public final static String CDATA_CHUNK_SIZE = "jdk.xml.cdataChunkSize";
|
||||
public static final int CDATA_CHUNK_SIZE_DEFAULT
|
||||
= SecuritySupport.getJAXPSystemProperty(Integer.class, CDATA_CHUNK_SIZE, "0");
|
||||
|
||||
/**
|
||||
* Returns the value.
|
||||
*
|
||||
* @param value the specified value
|
||||
* @param defValue the default value
|
||||
* @return the value, or the default value if the value is null
|
||||
*/
|
||||
public static int getValue(Object value, int defValue) {
|
||||
if (value == null) {
|
||||
return defValue;
|
||||
}
|
||||
|
||||
if (value instanceof Number) {
|
||||
return ((Number) value).intValue();
|
||||
} else if (value instanceof String) {
|
||||
return Integer.parseInt(String.valueOf(value));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unexpected class: "
|
||||
+ value.getClass());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the XMLReader instance with the specified property if the the
|
||||
* property is supported, ignores error if not, issues a warning if so
|
||||
* requested.
|
||||
*
|
||||
* @param reader an XMLReader instance
|
||||
* @param property the name of the property
|
||||
* @param value the value of the property
|
||||
* @param warn a flag indicating whether a warning should be issued
|
||||
*/
|
||||
public static void setXMLReaderPropertyIfSupport(XMLReader reader, String property,
|
||||
Object value, boolean warn) {
|
||||
try {
|
||||
reader.setProperty(property, value);
|
||||
} catch (SAXNotRecognizedException | SAXNotSupportedException e) {
|
||||
if (warn) {
|
||||
XMLSecurityManager.printWarning(reader.getClass().getName(),
|
||||
property, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a Catalog feature by the property name.
|
||||
*
|
||||
* @param features a CatalogFeatures instance
|
||||
* @param name the name of a Catalog feature
|
||||
* @return the value of a Catalog feature, null if the name does not match
|
||||
@ -106,10 +160,9 @@ public class JdkXmlUtils {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Passing on the CatalogFeatures settings from one Xerces configuration object
|
||||
* to another.
|
||||
* Passing on the CatalogFeatures settings from one Xerces configuration
|
||||
* object to another.
|
||||
*
|
||||
* @param config1 a Xerces configuration object
|
||||
* @param config2 a Xerces configuration object
|
||||
@ -120,14 +173,13 @@ public class JdkXmlUtils {
|
||||
boolean useCatalog = config1.getFeature(XMLConstants.USE_CATALOG);
|
||||
try {
|
||||
config2.setFeature(JdkXmlUtils.USE_CATALOG, useCatalog);
|
||||
}
|
||||
catch (XMLConfigurationException e) {
|
||||
} catch (XMLConfigurationException e) {
|
||||
supportCatalog = false;
|
||||
}
|
||||
|
||||
if (supportCatalog && useCatalog) {
|
||||
try {
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
for (CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
config2.setProperty(f.getPropertyName(), config1.getProperty(f.getPropertyName()));
|
||||
}
|
||||
} catch (XMLConfigurationException e) {
|
||||
@ -137,8 +189,8 @@ public class JdkXmlUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* Passing on the CatalogFeatures settings from a Xerces configuration object
|
||||
* to an XMLReader.
|
||||
* Passing on the CatalogFeatures settings from a Xerces configuration
|
||||
* object to an XMLReader.
|
||||
*
|
||||
* @param config a Xerces configuration object
|
||||
* @param reader an XMLReader
|
||||
@ -148,14 +200,13 @@ public class JdkXmlUtils {
|
||||
boolean useCatalog = config.getFeature(XMLConstants.USE_CATALOG);
|
||||
try {
|
||||
reader.setFeature(JdkXmlUtils.USE_CATALOG, useCatalog);
|
||||
}
|
||||
catch (SAXNotRecognizedException | SAXNotSupportedException e) {
|
||||
} catch (SAXNotRecognizedException | SAXNotSupportedException e) {
|
||||
supportCatalog = false;
|
||||
}
|
||||
|
||||
if (supportCatalog && useCatalog) {
|
||||
try {
|
||||
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
for (CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
|
||||
reader.setProperty(f.getPropertyName(), config.getProperty(f.getPropertyName()));
|
||||
}
|
||||
} catch (SAXNotRecognizedException | SAXNotSupportedException e) {
|
||||
|
@ -83,19 +83,26 @@ public class SecuritySupport {
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads boolean type system property.
|
||||
* Reads a system property.
|
||||
*
|
||||
* @param <T> the type of the property value
|
||||
* @param type the type of the property value
|
||||
* @param propName the name of the property
|
||||
* @param defValue the default value
|
||||
* @return the value of the property, or the default value of no system
|
||||
* property is found
|
||||
*/
|
||||
public static boolean getJAXPSystemProperty(String propName, boolean defValue) {
|
||||
public static <T> T getJAXPSystemProperty(Class<T> type, String propName, String defValue) {
|
||||
String value = getJAXPSystemProperty(propName);
|
||||
if (value == null) {
|
||||
return defValue;
|
||||
value = defValue;
|
||||
}
|
||||
return Boolean.parseBoolean(value);
|
||||
if (Integer.class.isAssignableFrom(type)) {
|
||||
return type.cast(Integer.parseInt(value));
|
||||
} else if (Boolean.class.isAssignableFrom(type)) {
|
||||
return type.cast(Boolean.parseBoolean(value));
|
||||
}
|
||||
return type.cast(value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +55,7 @@ TEE = tee
|
||||
UNAME = uname
|
||||
UNIQ = uniq
|
||||
WC = wc
|
||||
ZIP = zip
|
||||
ZIPEXE = zip
|
||||
|
||||
# Get OS name from uname (Cygwin inexplicably adds _NT-5.1)
|
||||
UNAME_S := $(shell $(UNAME) -s | $(CUT) -f1 -d_)
|
||||
@ -130,7 +130,7 @@ endif
|
||||
ZIP_UP_RESULTS = ( $(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)` \
|
||||
&& $(CD) $(ABS_TEST_OUTPUT_DIR) \
|
||||
&& $(CHMOD) -R a+r . \
|
||||
&& $(ZIP) -q -r $(ARCHIVE_BUNDLE) . )
|
||||
&& $(ZIPEXE) -q -r $(ARCHIVE_BUNDLE) . )
|
||||
|
||||
# important results files
|
||||
SUMMARY_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport/text/summary.txt")
|
||||
|
@ -23,4 +23,4 @@
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
javax/xml/jaxp/isolatedjdk/catalog/PropertiesTest.sh 8147431 generic-all
|
||||
javax/xml/jaxp/isolatedjdk/catalog/PropertiesTest.sh 8169827 generic-all
|
||||
|
284
jaxp/test/javax/xml/jaxp/unittest/common/CDataChunkSizeTest.java
Normal file
284
jaxp/test/javax/xml/jaxp/unittest/common/CDataChunkSizeTest.java
Normal file
File diff suppressed because one or more lines are too long
@ -27,17 +27,20 @@ import static jaxp.library.JAXPTestUtilities.getSystemProperty;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMResult;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.sax.SAXSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
@ -47,6 +50,7 @@ import org.testng.AssertJUnit;
|
||||
import org.testng.annotations.Listeners;
|
||||
import org.testng.annotations.Test;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.ContentHandler;
|
||||
@ -69,33 +73,10 @@ import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
|
||||
* @run testng/othervm -DrunSecMngr=true transform.TransformerTest
|
||||
* @run testng/othervm transform.TransformerTest
|
||||
* @summary Transformer Tests
|
||||
* @bug 6272879 6305029 6505031 8150704 8162598
|
||||
* @bug 6272879 6305029 6505031 8150704 8162598 8169772
|
||||
*/
|
||||
@Listeners({jaxp.library.FilePolicy.class})
|
||||
public class TransformerTest {
|
||||
private Transformer createTransformer() throws TransformerException {
|
||||
return TransformerFactory.newInstance().newTransformer();
|
||||
}
|
||||
|
||||
private Transformer createTransformerFromInputstream(InputStream xslStream) throws TransformerException {
|
||||
return TransformerFactory.newInstance().newTransformer(new StreamSource(xslStream));
|
||||
}
|
||||
|
||||
private Transformer createTransformerFromResource(String xslResource) throws TransformerException {
|
||||
return TransformerFactory.newInstance().newTransformer(new StreamSource(getClass().getResource(xslResource).toString()));
|
||||
}
|
||||
|
||||
private Document transformInputStreamToDocument(Transformer transformer, InputStream sourceStream) throws TransformerException {
|
||||
DOMResult response = new DOMResult();
|
||||
transformer.transform(new StreamSource(sourceStream), response);
|
||||
return (Document)response.getNode();
|
||||
}
|
||||
|
||||
private StringWriter transformResourceToStringWriter(Transformer transformer, String xmlResource) throws TransformerException {
|
||||
StringWriter sw = new StringWriter();
|
||||
transformer.transform(new StreamSource(getClass().getResource(xmlResource).toString()), new StreamResult(sw));
|
||||
return sw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the contents of the given file into a string.
|
||||
@ -302,10 +283,15 @@ public class TransformerTest {
|
||||
System.out.println(sourceXml);
|
||||
System.out.println();
|
||||
|
||||
// transform to DOM result
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
Transformer t = tf.newTransformer(new StreamSource(new ByteArrayInputStream(xsl.getBytes())));
|
||||
DOMResult result = new DOMResult();
|
||||
t.transform(new StreamSource(new ByteArrayInputStream(sourceXml.getBytes())), result);
|
||||
Document document = (Document)result.getNode();
|
||||
|
||||
System.out.println("Result after transformation:");
|
||||
System.out.println("============================");
|
||||
Document document = transformInputStreamToDocument(createTransformerFromInputstream(new ByteArrayInputStream(xsl.getBytes())),
|
||||
new ByteArrayInputStream(sourceXml.getBytes()));
|
||||
OutputFormat format = new OutputFormat();
|
||||
format.setIndenting(true);
|
||||
new XMLSerializer(System.out, format).serialize(document);
|
||||
@ -335,13 +321,14 @@ public class TransformerTest {
|
||||
// test SAXSource
|
||||
SAXSource saxSource = new SAXSource(new XMLReaderFor6305029(), new InputSource());
|
||||
StringWriter resultWriter = new StringWriter();
|
||||
createTransformer().transform(saxSource, new StreamResult(resultWriter));
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
tf.newTransformer().transform(saxSource, new StreamResult(resultWriter));
|
||||
AssertJUnit.assertEquals("Identity transform of SAXSource", XML_DOCUMENT, resultWriter.toString());
|
||||
|
||||
// test StreamSource
|
||||
StreamSource streamSource = new StreamSource(new StringReader(XML_DOCUMENT));
|
||||
resultWriter = new StringWriter();
|
||||
createTransformer().transform(streamSource, new StreamResult(resultWriter));
|
||||
tf.newTransformer().transform(streamSource, new StreamResult(resultWriter));
|
||||
AssertJUnit.assertEquals("Identity transform of StreamSource", XML_DOCUMENT, resultWriter.toString());
|
||||
}
|
||||
|
||||
@ -351,10 +338,13 @@ public class TransformerTest {
|
||||
*/
|
||||
@Test
|
||||
public final void testBug6505031() throws TransformerException {
|
||||
Transformer transformer = createTransformerFromResource("transform.xsl");
|
||||
transformer.setParameter("config", getClass().getResource("config.xml").toString());
|
||||
transformer.setParameter("mapsFile", getClass().getResource("maps.xml").toString());
|
||||
String s = transformResourceToStringWriter(transformer, "template.xml").toString();
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
Transformer t = tf.newTransformer(new StreamSource(getClass().getResource("transform.xsl").toString()));
|
||||
t.setParameter("config", getClass().getResource("config.xml").toString());
|
||||
t.setParameter("mapsFile", getClass().getResource("maps.xml").toString());
|
||||
StringWriter sw = new StringWriter();
|
||||
t.transform(new StreamSource(getClass().getResource("template.xml").toString()), new StreamResult(sw));
|
||||
String s = sw.toString();
|
||||
Assert.assertTrue(s.contains("map1key1value") && s.contains("map2key1value"));
|
||||
}
|
||||
|
||||
@ -365,17 +355,20 @@ public class TransformerTest {
|
||||
@Test
|
||||
public final void testBug8150704() throws TransformerException, IOException {
|
||||
System.out.println("Testing transformation of Bug8150704-1.xml...");
|
||||
Transformer transformer = createTransformerFromResource("Bug8150704-1.xsl");
|
||||
StringWriter result = transformResourceToStringWriter(transformer, "Bug8150704-1.xml");
|
||||
String resultstring = result.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
Transformer t = tf.newTransformer(new StreamSource(getClass().getResource("Bug8150704-1.xsl").toString()));
|
||||
StringWriter sw = new StringWriter();
|
||||
t.transform(new StreamSource(getClass().getResource("Bug8150704-1.xml").toString()), new StreamResult(sw));
|
||||
String resultstring = sw.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
|
||||
String reference = getFileContentAsString(new File(getClass().getResource("Bug8150704-1.ref").getPath()));
|
||||
Assert.assertEquals(resultstring, reference, "Output of transformation of Bug8150704-1.xml does not match reference");
|
||||
System.out.println("Passed.");
|
||||
|
||||
System.out.println("Testing transformation of Bug8150704-2.xml...");
|
||||
transformer = createTransformerFromResource("Bug8150704-2.xsl");
|
||||
result = transformResourceToStringWriter(transformer, "Bug8150704-2.xml");
|
||||
resultstring = result.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
|
||||
t = tf.newTransformer(new StreamSource(getClass().getResource("Bug8150704-2.xsl").toString()));
|
||||
sw = new StringWriter();
|
||||
t.transform(new StreamSource(getClass().getResource("Bug8150704-2.xml").toString()), new StreamResult(sw));
|
||||
resultstring = sw.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
|
||||
reference = getFileContentAsString(new File(getClass().getResource("Bug8150704-2.ref").getPath()));
|
||||
Assert.assertEquals(resultstring, reference, "Output of transformation of Bug8150704-2.xml does not match reference");
|
||||
System.out.println("Passed.");
|
||||
@ -422,11 +415,15 @@ public class TransformerTest {
|
||||
System.out.println(sourceXml);
|
||||
System.out.println();
|
||||
|
||||
// transform to DOM result
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
Transformer t = tf.newTransformer(new StreamSource(new ByteArrayInputStream(xsl.getBytes())));
|
||||
DOMResult result = new DOMResult();
|
||||
t.transform(new StreamSource(new ByteArrayInputStream(sourceXml.getBytes())), result);
|
||||
Document document = (Document)result.getNode();
|
||||
|
||||
System.out.println("Result after transformation:");
|
||||
System.out.println("============================");
|
||||
Document document = transformInputStreamToDocument(
|
||||
createTransformerFromInputstream(new ByteArrayInputStream(xsl.getBytes())),
|
||||
new ByteArrayInputStream(sourceXml.getBytes()));
|
||||
OutputFormat format = new OutputFormat();
|
||||
format.setIndenting(true);
|
||||
new XMLSerializer(System.out, format).serialize(document);
|
||||
@ -438,4 +435,38 @@ public class TransformerTest {
|
||||
checkNodeNS8162598(document.getElementsByTagName("test5").item(0), "ns1", "ns1", null);
|
||||
Assert.assertNull(document.getElementsByTagName("test6").item(0).getNamespaceURI(), "unexpected namespace for test6");
|
||||
}
|
||||
|
||||
/**
|
||||
* @bug 8169772
|
||||
* @summary Test transformation of DOM with null valued text node
|
||||
*
|
||||
* This test would throw a NullPointerException during transform when the
|
||||
* fix was not present.
|
||||
*/
|
||||
@Test
|
||||
public final void testBug8169772() throws ParserConfigurationException,
|
||||
SAXException, IOException, TransformerException
|
||||
{
|
||||
// create a small DOM
|
||||
Document doc = DocumentBuilderFactory.newInstance().
|
||||
newDocumentBuilder().parse(
|
||||
new ByteArrayInputStream(
|
||||
"<?xml version=\"1.0\"?><DOCROOT/>".getBytes()
|
||||
)
|
||||
);
|
||||
|
||||
// insert a bad element
|
||||
Element e = doc.createElement("ERROR");
|
||||
e.appendChild(doc.createTextNode(null));
|
||||
doc.getDocumentElement().appendChild(e);
|
||||
|
||||
// transform
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
TransformerFactory.newInstance().newTransformer().transform(
|
||||
new DOMSource(doc.getDocumentElement()), new StreamResult(bos)
|
||||
);
|
||||
System.out.println("Transformation result (DOM with null text node):");
|
||||
System.out.println("================================================");
|
||||
System.out.println(bos);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user