blautenb 2003/02/17 03:20:04
Added: c/src/transformers TXFMParser.hpp TXFMParser.cpp Log: Parser Transformer to convert a BYTE_STREAM to DOM_NODES Revision Changes Path 1.1 xml-security/c/src/transformers/TXFMParser.hpp Index: TXFMParser.hpp =================================================================== /* * 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/>. */ /* * XSEC * * TXFMParser := A transformer used to transform a byte stream to DOM Nodes * * Author(s): Berin Lautenbach * * $Id: TXFMParser.hpp,v 1.1 2003/02/17 11:20:03 blautenb Exp $ * * $Log: TXFMParser.hpp,v $ * Revision 1.1 2003/02/17 11:20:03 blautenb * Parser Transformer to convert a BYTE_STREAM to DOM_NODES * * */ #ifndef TXFMPARSER_INCLUDE #define TXFMPARSER_INCLUDE #include <xsec/transformers/TXFMBase.hpp> class DSIG_EXPORT TXFMParser : public TXFMBase { public: // Constructors and destructors TXFMParser(DOMDocument *); ~TXFMParser(); // Methods to get tranform output type and input requirement virtual TXFMBase::ioType getInputType(void); virtual TXFMBase::ioType getOutputType(void); virtual nodeType getNodeType(void); // Methods to set input data virtual void setInput(TXFMBase * newInput); // Methods to get output data virtual unsigned int readBytes(XMLByte * const toFill, const unsigned int maxToFill); virtual DOMDocument *getDocument(); virtual DOMNode *getFragmentNode(); virtual const XMLCh * getFragmentId(); // Name space management virtual bool nameSpacesExpanded(void); virtual void expandNameSpaces(void); private: TXFMParser(); DOMDocument * mp_parsedDoc; }; #endif /* #define TXFMPARSER_INCLUDE */ 1.1 xml-security/c/src/transformers/TXFMParser.cpp Index: TXFMParser.cpp =================================================================== /* * 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/>. */ /* * XSEC * * TXFMParser := A transformer used to transform a byte stream to DOM Nodes * * Author(s): Berin Lautenbach * * $Id: TXFMParser.cpp,v 1.1 2003/02/17 11:20:03 blautenb Exp $ * * $Log: TXFMParser.cpp,v $ * Revision 1.1 2003/02/17 11:20:03 blautenb * Parser Transformer to convert a BYTE_STREAM to DOM_NODES * * */ #include <xsec/transformers/TXFMParser.hpp> #include <xsec/utils/XSECPlatformUtils.hpp> #include <xsec/framework/XSECError.hpp> #include <xsec/utils/XSECTXFMInputSource.hpp> #include <xercesc/parsers/XercesDOMParser.hpp> #include <xercesc/framework/MemBufInputSource.hpp> XSEC_USING_XERCES(XercesDOMParser); XSEC_USING_XERCES(MemBufInputSource); TXFMParser::TXFMParser(DOMDocument * doc) : TXFMBase(doc), mp_parsedDoc(NULL) { }; TXFMParser::~TXFMParser() { if (mp_parsedDoc != NULL) { if (mp_nse != NULL) { delete mp_nse; // Don't bother collapsing mp_nse = NULL; } mp_parsedDoc->release(); } mp_parsedDoc = NULL; }; // ----------------------------------------------------------------------- // For expanding name spaces when necessary // ----------------------------------------------------------------------- bool TXFMParser::nameSpacesExpanded(void) { // NOTE : Do not check inputs as this has its own document return (mp_nse != NULL); } void TXFMParser::expandNameSpaces(void) { if (mp_nse != NULL) return; // Already done if (mp_parsedDoc != NULL) { XSECnew(mp_nse, XSECNameSpaceExpander(mp_parsedDoc)); mp_nse->expandNameSpaces(); } } // ----------------------------------------------------------------------- // Worker function // ----------------------------------------------------------------------- void TXFMParser::setInput(TXFMBase *newInput) { // This transformer terminates all previous inputs and deletes // the chain. input = newInput; // Create a InputStream XSECTXFMInputSource is(newInput, false); // Create a XercesParser and parse! XercesDOMParser parser; parser.setDoNamespaces(true); parser.setCreateEntityReferenceNodes(true); parser.setDoSchema(true); int errorCount = 0; parser.parse(is); errorCount = parser.getErrorCount(); if (errorCount > 0) throw XSECException(XSECException::XSLError, "Errors occured parsing BYTE STREAM"); mp_parsedDoc = parser.adoptDocument(); // Clean up keepComments = newInput->getCommentsStatus(); } // Methods to get tranform output type and input requirement TXFMBase::ioType TXFMParser::getInputType(void) { return TXFMBase::BYTE_STREAM; } TXFMBase::ioType TXFMParser::getOutputType(void) { return TXFMBase::DOM_NODES; } TXFMBase::nodeType TXFMParser::getNodeType(void) { return TXFMBase::DOM_NODE_DOCUMENT; } // Methods to get output data unsigned int TXFMParser::readBytes(XMLByte * const toFill, unsigned int maxToFill) { return 0; } DOMDocument *TXFMParser::getDocument() { return mp_parsedDoc; } DOMNode * TXFMParser::getFragmentNode() { return NULL; // Return a null node } const XMLCh * TXFMParser::getFragmentId() { return NULL; // Empty string }
