/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the  "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * $Id: SerializableLocatorImpl.java 468655 2006-10-28 07:12:06Z minchau $
 */
package org.apache.xml.utils;


The standard SAX implementation of LocatorImpl is not serializable, limiting its utility as "a persistent snapshot of a locator". This is a quick hack to make it so. Note that it makes more sense in many cases to set up fields to hold this data rather than pointing at another object... but that decision should be made on architectural grounds rather than serializability.

It isn't clear whether subclassing LocatorImpl and adding serialization methods makes more sense than copying it and just adding Serializable to its interface. Since it's so simple, I've taken the latter approach for now.

Author:Joe Kesselman
See Also:
Since:XalanJ2
Version:1.0
/** * The standard SAX implementation of LocatorImpl is not serializable, * limiting its utility as "a persistent snapshot of a locator". * This is a quick hack to make it so. Note that it makes more sense * in many cases to set up fields to hold this data rather than pointing * at another object... but that decision should be made on architectural * grounds rather than serializability. *<p> * It isn't clear whether subclassing LocatorImpl and adding serialization * methods makes more sense than copying it and just adding Serializable * to its interface. Since it's so simple, I've taken the latter approach * for now. * * @see org.xml.sax.helpers.LocatorImpl * @see org.xml.sax.Locator Locator * @since XalanJ2 * @author Joe Kesselman * @version 1.0 */
public class SerializableLocatorImpl implements org.xml.sax.Locator, java.io.Serializable { static final long serialVersionUID = -2660312888446371460L;
Zero-argument constructor.

SAX says "This will not normally be useful, since the main purpose of this class is to make a snapshot of an existing Locator." In fact, it _is_ sometimes useful when you want to construct a new Locator pointing to a specific location... which, after all, is why the setter methods are provided.

/** * Zero-argument constructor. * * <p>SAX says "This will not normally be useful, since the main purpose * of this class is to make a snapshot of an existing Locator." In fact, * it _is_ sometimes useful when you want to construct a new Locator * pointing to a specific location... which, after all, is why the * setter methods are provided. * </p> */
public SerializableLocatorImpl () { }
Copy constructor.

Create a persistent copy of the current state of a locator. When the original locator changes, this copy will still keep the original values (and it can be used outside the scope of DocumentHandler methods).

Params:
  • locator – The locator to copy.
/** * Copy constructor. * * <p>Create a persistent copy of the current state of a locator. * When the original locator changes, this copy will still keep * the original values (and it can be used outside the scope of * DocumentHandler methods).</p> * * @param locator The locator to copy. */
public SerializableLocatorImpl (org.xml.sax.Locator locator) { setPublicId(locator.getPublicId()); setSystemId(locator.getSystemId()); setLineNumber(locator.getLineNumber()); setColumnNumber(locator.getColumnNumber()); } //////////////////////////////////////////////////////////////////// // Implementation of org.xml.sax.Locator ////////////////////////////////////////////////////////////////////
Return the saved public identifier.
See Also:
Returns:The public identifier as a string, or null if none is available.
/** * Return the saved public identifier. * * @return The public identifier as a string, or null if none * is available. * @see org.xml.sax.Locator#getPublicId * @see #setPublicId */
public String getPublicId () { return publicId; }
Return the saved system identifier.
See Also:
Returns:The system identifier as a string, or null if none is available.
/** * Return the saved system identifier. * * @return The system identifier as a string, or null if none * is available. * @see org.xml.sax.Locator#getSystemId * @see #setSystemId */
public String getSystemId () { return systemId; }
Return the saved line number (1-based).
See Also:
Returns:The line number as an integer, or -1 if none is available.
/** * Return the saved line number (1-based). * * @return The line number as an integer, or -1 if none is available. * @see org.xml.sax.Locator#getLineNumber * @see #setLineNumber */
public int getLineNumber () { return lineNumber; }
Return the saved column number (1-based).
See Also:
Returns:The column number as an integer, or -1 if none is available.
/** * Return the saved column number (1-based). * * @return The column number as an integer, or -1 if none is available. * @see org.xml.sax.Locator#getColumnNumber * @see #setColumnNumber */
public int getColumnNumber () { return columnNumber; } //////////////////////////////////////////////////////////////////// // Setters for the properties (not in org.xml.sax.Locator) ////////////////////////////////////////////////////////////////////
Set the public identifier for this locator.
Params:
  • publicId – The new public identifier, or null if none is available.
See Also:
/** * Set the public identifier for this locator. * * @param publicId The new public identifier, or null * if none is available. * @see #getPublicId */
public void setPublicId (String publicId) { this.publicId = publicId; }
Set the system identifier for this locator.
Params:
  • systemId – The new system identifier, or null if none is available.
See Also:
/** * Set the system identifier for this locator. * * @param systemId The new system identifier, or null * if none is available. * @see #getSystemId */
public void setSystemId (String systemId) { this.systemId = systemId; }
Set the line number for this locator (1-based).
Params:
  • lineNumber – The line number, or -1 if none is available.
See Also:
/** * Set the line number for this locator (1-based). * * @param lineNumber The line number, or -1 if none is available. * @see #getLineNumber */
public void setLineNumber (int lineNumber) { this.lineNumber = lineNumber; }
Set the column number for this locator (1-based).
Params:
  • columnNumber – The column number, or -1 if none is available.
See Also:
/** * Set the column number for this locator (1-based). * * @param columnNumber The column number, or -1 if none is available. * @see #getColumnNumber */
public void setColumnNumber (int columnNumber) { this.columnNumber = columnNumber; } //////////////////////////////////////////////////////////////////// // Internal state. ////////////////////////////////////////////////////////////////////
The public ID.
@serial
/** * The public ID. * @serial */
private String publicId;
The system ID.
@serial
/** * The system ID. * @serial */
private String systemId;
The line number.
@serial
/** * The line number. * @serial */
private int lineNumber;
The column number.
@serial
/** * The column number. * @serial */
private int columnNumber; } // end of LocatorImpl.java