[WSS4J] wss4j/src/org/apache/ws/security/transform STRTransform.java,NONE,1.1

[email protected] Thu, 15 Jan 2004 04:25:35 -0800
Newsgroups gmane.text.xml.wss4j
Message-ID <[email protected]>
Update of /cvsroot/wss4j/wss4j/src/org/apache/ws/security/transform
In directory sc8-pr-cvs1:/tmp/cvs-serv31504/src/org/apache/ws/security/transform

Added Files:
	STRTransform.java 
Log Message:
Start STR-Transform implementation. Only the first hooks in WSSignEnvelope,
a specific package, and a STRTransform source that is just a standard
c14n transformation as yet. Further refinements of the code follow.

--- NEW FILE: STRTransform.java ---
/*
 * The Apache Software License, Version 1.1
 *
 *
 * Copyright (c) 1999 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "<WebSig>" and "Apache Software Foundation" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact [email protected]
 *
 * 5. Products derived from this software may not be called "Apache",
 *    nor may "Apache" appear in their name, without prior written
 *    permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation and was
 * originally based on software copyright (c) 2001, Institute for
 * Data Communications Systems, <http://www.nue.et-inf.uni-siegen.de/>.
 * The development of this software was partly funded by the European
 * Commission in the <WebSig> project in the ISIS Programme.
 * For more information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 */
package org.apache.ws.security.transform;

import java.io.IOException;
import java.io.ByteArrayInputStream;
import org.apache.xml.security.signature.XMLSignatureInput;
import org.apache.xml.security.exceptions.XMLSecurityException;
import org.apache.xml.security.utils.Constants;
import org.apache.xml.security.c14n.*;
import org.apache.xml.security.c14n.implementations.*;
import org.apache.xml.security.transforms.*;
import org.apache.xml.security.transforms.params.InclusiveNamespaces;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.w3c.dom.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * Class STRTransform
 *
 * @author Werner Dittmann ([email protected])
 * @version 1.0
 */
public class STRTransform extends TransformSpi {

	/** Field implementedTransformURI */
	public static final String implementedTransformURI =
		"http://schemas.xmlsoap.org/2003/06/STR-Transform";

	private static Log log = LogFactory.getLog(STRTransform.class.getName());
	private static boolean doDebug = false;

	public boolean wantsOctetStream() {
		return false;
	}
	public boolean wantsNodeSet() {
		return true;
	}
	public boolean returnsOctetStream() {
		return true;
	}
	public boolean returnsNodeSet() {
		return false;
	}

	/**
	 * Method engineGetURI
	 *
	 *
	 */
	protected String engineGetURI() {
		return STRTransform.implementedTransformURI;
	}

	/**
	 * Method enginePerformTransform
	 *
	 * @param input
	 *
	 * @throws CanonicalizationException
	 * @throws InvalidCanonicalizerException
	 */
	protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input)
		throws IOException, CanonicalizationException, InvalidCanonicalizerException {

		doDebug = log.isDebugEnabled();

		if (doDebug) {
			log.debug("Beginning STRTransform...");
		}

	/*
	 * This is only a preliminary implementation to get it up and to
	 * test the registration, call, etc. Real STR follows soon.

		try {
			Canonicalizer20010315WithComments c14n =
				new Canonicalizer20010315WithComments();
			byte[] result = null;
			if (input.isOctetStream()) {
				result = c14n.engineCanonicalize(input.getBytes());
			} else {
				result =
					c14n.engineCanonicalizeXPathNodeSet(input.getNodeSet());
			}
			if (doDebug) {
				log.debug("Exit STRTransform...");
			}
			return new XMLSignatureInput(result);
		} catch (ParserConfigurationException ex) {
			Object[] exArgs = { ex.getMessage()};
			CanonicalizationException cex =
				new CanonicalizationException(
					"c14n.Canonicalizer.ParserConfigurationException",
					exArgs);
			throw cex;
		} catch (SAXException ex) {
			Object[] exArgs = { ex.toString()};
			CanonicalizationException cex =
				new CanonicalizationException(
					"c14n.Canonicalizer.SAXException",
					exArgs);

			throw cex;
		}
	 */

      try {
         InclusiveNamespaces inclusiveNamespaces = null;

         if (this._transformObject
                 .length(InclusiveNamespaces
                    .ExclusiveCanonicalizationNamespace, InclusiveNamespaces
                    ._TAG_EC_INCLUSIVENAMESPACES) == 1) {
            Element inclusiveElement =
               this._transformObject.getChildElementLocalName(0,
                  InclusiveNamespaces.ExclusiveCanonicalizationNamespace,
                  InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES);

            inclusiveNamespaces = new InclusiveNamespaces(inclusiveElement,
                    this._transformObject.getBaseURI());
         }

         Canonicalizer20010315ExclOmitComments c14n =
            new Canonicalizer20010315ExclOmitComments();

         if (input.isOctetStream()) {
            return new XMLSignatureInput(c14n
               .engineCanonicalize(input.getBytes()));
         } else {
            if (inclusiveNamespaces == null) {
               return new XMLSignatureInput(c14n
                  .engineCanonicalizeXPathNodeSet(input.getNodeSet()));
            } else {
               return new XMLSignatureInput(c14n
                  .engineCanonicalizeXPathNodeSet(input
                     .getNodeSet(), inclusiveNamespaces
                     .getInclusiveNamespaces()));
            }
         }
      } catch (IOException ex) {
         throw new CanonicalizationException("empty", ex);
      } catch (ParserConfigurationException ex) {
         throw new CanonicalizationException("empty", ex);
      } catch (XMLSecurityException ex) {
         throw new CanonicalizationException("empty", ex);
      } catch (SAXException ex) {
         throw new CanonicalizationException("empty", ex);
      }
   }
}




-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html