Package org.springframework.xml.transform

Source Code of org.springframework.xml.transform.TransformerHelper

/*
* Copyright 2005-2010 the original author or authors.
*
* 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.springframework.xml.transform;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;

import org.springframework.util.Assert;

/**
* Helper class for {@link Transformer} usage. Provides {@link #createTransformer()} and {@link #transform(Source,
* Result)}.
*
* @author Arjen Poutsma
* @since 3.0
*/
public class TransformerHelper {

    private volatile TransformerFactory transformerFactory;

    private Class<? extends TransformerFactory> transformerFactoryClass;

    /**
     * Initializes a new instance of the {@code TransformerHelper}.
     */
    public TransformerHelper() {
    }

    /**
     * Initializes a new instance of the {@code TransformerHelper} with the specified {@link TransformerFactory}.
     */
    public TransformerHelper(TransformerFactory transformerFactory) {
        this.transformerFactory = transformerFactory;
    }

    /**
     * Initializes a new instance of the {@code TransformerHelper} with the specified {@link TransformerFactory} class.
     */
    public TransformerHelper(Class<? extends TransformerFactory> transformerFactoryClass) {
        setTransformerFactoryClass(transformerFactoryClass);
    }

    /**
     * Specify the {@code TransformerFactory} class to use.
     */
    public void setTransformerFactoryClass(Class<? extends TransformerFactory> transformerFactoryClass) {
        Assert.isAssignable(TransformerFactory.class, transformerFactoryClass);
        this.transformerFactoryClass = transformerFactoryClass;
    }

    /**
     * Instantiate a new TransformerFactory.
     *
     * <p>The default implementation simply calls {@link TransformerFactory#newInstance()}. If a {@link
     * #setTransformerFactoryClass transformerFactoryClass} has been specified explicitly, the default constructor of
     * the specified class will be called instead.
     *
     * <p>Can be overridden in subclasses.
     *
     * @param transformerFactoryClass the specified factory class (if any)
     * @return the new TransactionFactory instance
     * @see #setTransformerFactoryClass
     * @see #getTransformerFactory()
     */
    protected TransformerFactory newTransformerFactory(Class<? extends TransformerFactory> transformerFactoryClass) {
        if (transformerFactoryClass != null) {
            try {
                return transformerFactoryClass.newInstance();
            }
            catch (Exception ex) {
                throw new TransformerFactoryConfigurationError(ex,
                        "Could not instantiate TransformerFactory [" + transformerFactoryClass + "]");
            }
        }
        else {
            return TransformerFactory.newInstance();
        }
    }

    /**
     * Returns the {@code TransformerFactory}.
     *
     * @return the transformer factory
     */
    public TransformerFactory getTransformerFactory() {
        TransformerFactory result = transformerFactory;
        if (result == null) {
            synchronized (this) {
                result = transformerFactory;
                if (result == null) {
                    transformerFactory = result = newTransformerFactory(transformerFactoryClass);
                }
            }
        }
        return result;
    }

    /**
     * Creates a new {@code Transformer}. Must be called per thread, as transformers are not thread-safe.
     *
     * @return the created transformer
     * @throws TransformerConfigurationException
     *          if thrown by JAXP methods
     */
    public Transformer createTransformer() throws TransformerConfigurationException {
        return getTransformerFactory().newTransformer();
    }

    /**
     * Transforms the given {@link Source} to the given {@link Result}. Creates a new {@link Transformer} for every
     * call, as transformers are not thread-safe.
     *
     * @param source the source to transform from
     * @param result the result to transform to
     * @throws TransformerException if thrown by JAXP methods
     */
    public void transform(Source source, Result result) throws TransformerException {
        Transformer transformer = createTransformer();
        transformer.transform(source, result);
    }

}
TOP

Related Classes of org.springframework.xml.transform.TransformerHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.