📄 saxbeanwriter.java
字号:
/*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.betwixt.io;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
// FIX ME
// At the moment, namespaces are NOT supported!
/**
* The SAXBeanwriter will send events to a ContentHandler
*
* @author <a href="mailto:rdonkin@apache.org">Robert Burrell Donkin</a>
* @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
*/
public class SAXBeanWriter extends AbstractBeanWriter {
/** Where the output goes */
private ContentHandler contentHandler;
/** Log used for logging (Doh!) */
private Log log = LogFactory.getLog( SAXBeanWriter.class );
/** Should document events (ie. start and end) be called? */
private boolean callDocumentEvents = true;
/**
* <p> Constructor sets writer used for output.</p>
*
* @param contentHandler feed events to this content handler
*/
public SAXBeanWriter(ContentHandler contentHandler) {
this.contentHandler = contentHandler;
}
/**
* Should document events (ie start and end) be called?
*
* @return true if this SAXWriter should call start
* and end of the content handler
* @since 0.5
*/
public boolean getCallDocumentEvents() {
return callDocumentEvents;
}
/**
* Sets whether the document events (ie start and end) should be called.
*
* @param callDocumentEvents should document events be called
* @since 0.5
*/
public void setCallDocumentEvents(boolean callDocumentEvents) {
this.callDocumentEvents = callDocumentEvents;
}
/**
* <p> Set the log implementation used. </p>
*
* @return <code>Log</code> implementation that this class logs to
*/
public Log getLog() {
return log;
}
/**
* <p> Set the log implementation used. </p>
*
* @param log <code>Log</code> implementation to use
*/
public void setLog(Log log) {
this.log = log;
}
// Expression methods
//-------------------------------------------------------------------------
// Replaced by new API
// New API
// -------------------------------------------------------------------------
/**
* Writes the start tag for an element.
*
* @param uri the element's namespace uri
* @param localName the element's local name
* @param qName the element's qualified name
* @param attributes the element's attributes
* @throws SAXException if an SAX problem occurs during writing
* @since 0.5
*/
protected void startElement(
WriteContext context,
String uri,
String localName,
String qName,
Attributes attributes)
throws
SAXException {
contentHandler.startElement(
uri,
localName,
qName,
attributes);
}
/**
* Writes the end tag for an element
*
* @param uri the element's namespace uri
* @param localName the element's local name
* @param qName the element's qualified name
* @throws SAXException if an SAX problem occurs during writing
* @since 0.5
*/
protected void endElement(
WriteContext context,
String uri,
String localName,
String qName)
throws
SAXException {
contentHandler.endElement(
uri,
localName,
qName);
}
/**
* Express body text
* @param text the element body text
* @throws SAXException if the <code>ContentHandler</code> has a problem
* @since 0.5
*/
protected void bodyText(WriteContext context, String text) throws SAXException {
//TODO:
// FIX ME
// CHECK UNICODE->CHAR CONVERSION!
// THIS WILL QUITE POSSIBLY BREAK FOR NON-ROMAN
char[] body = text.toCharArray();
contentHandler.characters(body, 0, body.length);
}
/**
* This will announce the start of the document
* to the contenthandler.
*
* @see org.apache.commons.betwixt.io.AbstractBeanWriter#end()
*/
public void start() throws SAXException {
if ( callDocumentEvents ) {
contentHandler.startDocument();
}
}
/**
* This method will announce the end of the document to
* the contenthandler.
*
* @see org.apache.commons.betwixt.io.AbstractBeanWriter#start()
*/
public void end() throws SAXException {
if ( callDocumentEvents ) {
contentHandler.endDocument();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -