blob: 5fd8efc0fdf1f31720452d5e1a7632e278e77762 [file] [log] [blame]
/**************************************************************
*
* 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.
*
**************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
//This file is about the conversion of the UOF v2.0 and ODF document format
#include "precompiled_filter.hxx"
#include "uof2merge.hxx"
#include <cppuhelper/implbase1.hxx>
#include <rtl/ustrbuf.hxx>
#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/io/XOutputStream.hpp>
#include <com/sun/star/xml/sax/XParser.hpp>
#include <com/sun/star/io/XActiveDataSource.hpp>
#include <com/sun/star/xml/sax/InputSource.hpp>
#include <com/sun/star/xml/sax/XAttributeList.hpp>
#include "XMLBase64Codec.hxx"
namespace XSLT{
const ::rtl::OUString UOF2ROOTELEM = ::rtl::OUString::createFromAscii("uof:UOF_0000");
const ::rtl::OUString UOF2OBJDATAXML = ::rtl::OUString::createFromAscii("objectdata.xml");
const ::rtl::OUString UOF2DATADIR = ::rtl::OUString::createFromAscii("data");
/************************************************************************/
/* class UOF2AttributeList */
/************************************************************************/
class UOF2AttributeList : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XAttributeList >
{
public:
struct UOF2Attribute
{
::rtl::OUString m_sName;
::rtl::OUString m_sValue;
::rtl::OUString m_sType;
UOF2Attribute( const ::rtl::OUString& rName, const ::rtl::OUString& rValue, const ::rtl::OUString& rType)
: m_sName(rName)
, m_sValue(rValue)
, m_sType(rType)
{
}
};
explicit UOF2AttributeList();
virtual ~UOF2AttributeList();
void addAttribute( const UOF2Attribute& rAttribute );
virtual sal_Int16 SAL_CALL getLength() throw ( ::com::sun::star::uno::RuntimeException );
virtual ::rtl::OUString SAL_CALL getNameByIndex( sal_Int16 i) throw ( ::com::sun::star::uno::RuntimeException );
virtual ::rtl::OUString SAL_CALL getTypeByIndex( sal_Int16 i) throw ( ::com::sun::star::uno::RuntimeException );
virtual ::rtl::OUString SAL_CALL getTypeByName( const ::rtl::OUString& rName ) throw ( ::com::sun::star::uno::RuntimeException );
virtual ::rtl::OUString SAL_CALL getValueByIndex( sal_Int16 i ) throw ( ::com::sun::star::uno::RuntimeException );
virtual ::rtl::OUString SAL_CALL getValueByName( const ::rtl::OUString& rName ) throw ( ::com::sun::star::uno::RuntimeException );
private:
::std::vector< UOF2Attribute > m_aAttributes;
};
UOF2AttributeList::UOF2AttributeList()
{
}
UOF2AttributeList::~UOF2AttributeList()
{
}
void UOF2AttributeList::addAttribute( const UOF2Attribute& rAttribute )
{
if(rAttribute.m_sName.getLength() && rAttribute.m_sValue.getLength())
m_aAttributes.push_back(rAttribute);
}
sal_Int16 SAL_CALL UOF2AttributeList::getLength() throw ( ::com::sun::star::uno::RuntimeException )
{
return static_cast< sal_Int16 >(m_aAttributes.size());
}
::rtl::OUString SAL_CALL UOF2AttributeList::getNameByIndex( sal_Int16 i ) throw ( ::com::sun::star::uno::RuntimeException )
{
return m_aAttributes[i].m_sName;
}
::rtl::OUString SAL_CALL UOF2AttributeList::getTypeByIndex( sal_Int16 i ) throw ( ::com::sun::star::uno::RuntimeException )
{
return m_aAttributes[i].m_sType;
}
::rtl::OUString SAL_CALL UOF2AttributeList::getTypeByName( const ::rtl::OUString& rName ) throw ( ::com::sun::star::uno::RuntimeException )
{
::std::vector< UOF2AttributeList::UOF2Attribute >::const_iterator aIter = m_aAttributes.begin();
::std::vector< UOF2AttributeList::UOF2Attribute >::const_iterator aEnd = m_aAttributes.end();
while(aIter != aEnd)
{
if((*aIter).m_sName.equals(rName))
return (*aIter).m_sType;
++aIter;
}
return ::rtl::OUString();
}
::rtl::OUString SAL_CALL UOF2AttributeList::getValueByIndex( sal_Int16 i ) throw ( ::com::sun::star::uno::RuntimeException )
{
return m_aAttributes[i].m_sValue;
}
::rtl::OUString SAL_CALL UOF2AttributeList::getValueByName( const ::rtl::OUString& rName ) throw ( ::com::sun::star::uno::RuntimeException )
{
::std::vector< UOF2AttributeList::UOF2Attribute >::const_iterator aIter = m_aAttributes.begin();
::std::vector< UOF2AttributeList::UOF2Attribute >::const_iterator aEnd = m_aAttributes.end();
while(aIter != aEnd)
{
if((*aIter).m_sName.equals(rName))
return (*aIter).m_sValue;
++aIter;
}
return ::rtl::OUString();
}
/************************************************************************/
/* class UOF2FlatDocMergeHandler */
/************************************************************************/
class UOF2FlatDocMergeHandler : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler >
{
public:
explicit UOF2FlatDocMergeHandler(UOF2Merge& rUOF2Merge);
virtual ~UOF2FlatDocMergeHandler();
virtual void SAL_CALL startDocument()
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL endDocument()
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL startElement( const ::rtl::OUString& rElemName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttribs )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL endElement( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL characters( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL ignorableWhitespace( const ::rtl::OUString& rWhiteSpaces )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL processingInstruction( const ::rtl::OUString& rTarget, const ::rtl::OUString& rData )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL setDocumentLocator( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >& xLocator )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
protected:
UOF2Merge& getUOF2Merge(){ return m_rUOF2Merge; }
private:
UOF2Merge& m_rUOF2Merge;
sal_Int32 m_nLevel;
private:
UOF2FlatDocMergeHandler(const UOF2FlatDocMergeHandler& rDocHdl);
UOF2FlatDocMergeHandler& operator=(const UOF2FlatDocMergeHandler& rDocHdl);
};
UOF2FlatDocMergeHandler::UOF2FlatDocMergeHandler( UOF2Merge& rUOF2Merge )
: m_rUOF2Merge(rUOF2Merge)
, m_nLevel(0)
{
}
UOF2FlatDocMergeHandler::~UOF2FlatDocMergeHandler()
{
}
void SAL_CALL UOF2FlatDocMergeHandler::startDocument()
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
}
void SAL_CALL UOF2FlatDocMergeHandler::endDocument()
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
}
void SAL_CALL UOF2FlatDocMergeHandler::startElement( const ::rtl::OUString& rElemName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttribs )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
++m_nLevel;
if( m_nLevel == 1)
{
UOF2AttributeList *pUOF2AttrList = new UOF2AttributeList;
sal_Int16 nLen = rAttribs->getLength();
if(nLen > 0)
{
for( sal_Int16 i = 0; i < nLen; ++i)
{
bool bIsExistNMS = false;
if((rAttribs->getNameByIndex(i).indexOf( ::rtl::OUString::createFromAscii("xmlns:"))) == 0)
{
bIsExistNMS = m_rUOF2Merge.isInsertedNamespace(rAttribs->getNameByIndex(i));
if(!bIsExistNMS)
m_rUOF2Merge.addNamespace(rAttribs->getNameByIndex(i), rAttribs->getValueByIndex(i));
}
if(!bIsExistNMS)
{
pUOF2AttrList->addAttribute(
UOF2AttributeList::UOF2Attribute( rAttribs->getNameByIndex(i), rAttribs->getValueByIndex(i), rAttribs->getTypeByIndex(i)) );
}
}
}
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > xAttrList(pUOF2AttrList);
m_rUOF2Merge.getSaxWriter()->startElement(rElemName, xAttrList);
}
else
m_rUOF2Merge.getSaxWriter()->startElement(rElemName, rAttribs);
}
void SAL_CALL UOF2FlatDocMergeHandler::endElement( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
--m_nLevel;
m_rUOF2Merge.getSaxWriter()->endElement(rElemName);
}
void SAL_CALL UOF2FlatDocMergeHandler::characters( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
m_rUOF2Merge.getSaxWriter()->characters(rElemName);
}
void SAL_CALL UOF2FlatDocMergeHandler::ignorableWhitespace( const ::rtl::OUString& /*rWhiteSpaces*/ )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
}
void SAL_CALL UOF2FlatDocMergeHandler::processingInstruction( const ::rtl::OUString& /*rTarget*/, const ::rtl::OUString&/* rData */)
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
}
void SAL_CALL UOF2FlatDocMergeHandler::setDocumentLocator(
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >& /*xLocator*/ )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
}
/************************************************************************/
/* class UOF2UOFXMLDocMergeHandler */
/************************************************************************/
class UOF2UOFXMLDocMergeHandler : public UOF2FlatDocMergeHandler
{
public:
explicit UOF2UOFXMLDocMergeHandler( UOF2Merge& rUOF2Merge);
virtual ~UOF2UOFXMLDocMergeHandler();
virtual void SAL_CALL endElement( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
};
UOF2UOFXMLDocMergeHandler::UOF2UOFXMLDocMergeHandler( UOF2Merge& rUOF2Merge )
: UOF2FlatDocMergeHandler(rUOF2Merge)
{
}
UOF2UOFXMLDocMergeHandler::~UOF2UOFXMLDocMergeHandler()
{
}
void SAL_CALL UOF2UOFXMLDocMergeHandler::endElement( const ::rtl::OUString& /*rElemName*/ )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
}
/************************************************************************/
/* class UOF2ObjdataXMLDocMergeHandler */
/************************************************************************/
class UOF2ObjdataXMLDocMergeHandler : public UOF2FlatDocMergeHandler
{
public:
UOF2ObjdataXMLDocMergeHandler( UOF2Merge& rMerge );
virtual ~UOF2ObjdataXMLDocMergeHandler();
virtual void SAL_CALL startElement( const ::rtl::OUString& rElemName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttribs )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL endElement( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
virtual void SAL_CALL characters( const ::rtl::OUString& rChars )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
private:
static const ::rtl::OUString OBJPATH;
static const ::rtl::OUString OBJDATA;
bool m_bIsObjPathElem;
};
const ::rtl::OUString UOF2ObjdataXMLDocMergeHandler::OBJPATH( ::rtl::OStringToOUString( ::rtl::OString("对象:路径_D703"), RTL_TEXTENCODING_UTF8 ) );
const ::rtl::OUString UOF2ObjdataXMLDocMergeHandler::OBJDATA( ::rtl::OStringToOUString( ::rtl::OString("对象:数据_D702"), RTL_TEXTENCODING_UTF8 ) );
UOF2ObjdataXMLDocMergeHandler::UOF2ObjdataXMLDocMergeHandler( UOF2Merge& rMerge )
: UOF2FlatDocMergeHandler(rMerge)
, m_bIsObjPathElem(false)
{
}
UOF2ObjdataXMLDocMergeHandler::~UOF2ObjdataXMLDocMergeHandler()
{
}
void SAL_CALL UOF2ObjdataXMLDocMergeHandler::startElement( const ::rtl::OUString& rElemName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttribs )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
if(rElemName.equals(OBJPATH))
{
m_bIsObjPathElem = true;
UOF2FlatDocMergeHandler::startElement(OBJDATA, rAttribs);
}
else
{
UOF2FlatDocMergeHandler::startElement(rElemName, rAttribs);
m_bIsObjPathElem = false;
}
}
void SAL_CALL UOF2ObjdataXMLDocMergeHandler::endElement( const ::rtl::OUString& rElemName )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
if(m_bIsObjPathElem)
UOF2FlatDocMergeHandler::endElement(OBJDATA);
else
UOF2FlatDocMergeHandler::endElement(rElemName);
m_bIsObjPathElem = false;
}
void SAL_CALL UOF2ObjdataXMLDocMergeHandler::characters( const ::rtl::OUString& rChars )
throw ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
{
if(m_bIsObjPathElem)
{
::rtl::OUStringBuffer sBuffer;
bool bHasBase64 = getUOF2Merge().getBase64Codec(sBuffer, rChars);
if(bHasBase64)
UOF2FlatDocMergeHandler::characters(sBuffer.makeStringAndClear());
}
else
UOF2FlatDocMergeHandler::characters(rChars);
}
/************************************************************************/
/* class UOF2Merge */
/************************************************************************/
UOF2Merge::UOF2Merge( UOF2Storage& rStorage,
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxFactory )
: m_rUOF2Storage(rStorage)
, m_xServiceFactory(rxFactory)
{
OSL_ENSURE(rxFactory.is(), "UOF2Merge::UOF2Merge need XMultiServiceFactory");
OSL_ENSURE(rStorage.isValidUOF2Doc(), "UOF2Merge::UOF2Merge - You must import valid UOF2 document");
init();
}
UOF2Merge::~UOF2Merge()
{
}
void UOF2Merge::init()
{
try
{
m_xPipeInStream.set(m_xServiceFactory->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.io.Pipe") ),
::com::sun::star::uno::UNO_QUERY);
m_xPipeOutStream.set(m_xPipeInStream, ::com::sun::star::uno::UNO_QUERY);
m_xSaxParser.set(m_xServiceFactory->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.xml.sax.Parser") ),
::com::sun::star::uno::UNO_QUERY);
m_xExtDocHdl.set(m_xServiceFactory->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.xml.sax.Writer") ),
::com::sun::star::uno::UNO_QUERY);
::com::sun::star::uno::Reference< ::com::sun::star::io::XActiveDataSource > xmlSource(
m_xExtDocHdl, ::com::sun::star::uno::UNO_QUERY);
xmlSource->setOutputStream(m_xPipeOutStream);
}
catch( ::com::sun::star::uno::Exception& exc)
{
OSL_ENSURE(0, ::rtl::OUStringToOString(exc.Message, RTL_TEXTENCODING_ASCII_US).getStr());
}
}
bool UOF2Merge::merge()
{
bool bRet = true;
::std::vector< ::rtl::OUString > aElemNames;
StorageRef storageRef = m_rUOF2Storage.getMainStorageRef();
storageRef->getElementNames(aElemNames);
m_xExtDocHdl->startDocument();
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xUOFXMLInputStream =
storageRef->openInputStream(UOFELEMNAME);
startUOFRootXML(xUOFXMLInputStream);
::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XDocumentHandler > xUOF2SubXMLDocHdl( new UOF2FlatDocMergeHandler(*this) );
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > xObjdataXMLDocHdl;
::std::vector< ::rtl::OUString >::const_iterator aIter = aElemNames.begin();
::std::vector< ::rtl::OUString >::const_iterator aEndIt = aElemNames.end();
while(aIter != aEndIt)
{
m_xSaxParser->setDocumentHandler(xUOF2SubXMLDocHdl);
if((*aIter) != UOFELEMNAME)
{
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xInputStream = storageRef->openInputStream(*aIter);
if(xInputStream.is())
{
if((*aIter) == UOF2OBJDATAXML)
{
xObjdataXMLDocHdl.set( new UOF2ObjdataXMLDocMergeHandler(*this) );
m_xSaxParser->setDocumentHandler(xObjdataXMLDocHdl);
}
::com::sun::star::xml::sax::InputSource inputSource;
inputSource.sSystemId = *aIter;
inputSource.aInputStream = xInputStream;
m_xSaxParser->parseStream(inputSource);
}
else
{
StorageRef subStorage =
storageRef->openSubStorage(*aIter, false);
if(subStorage.get())
{
if((*aIter) != UOF2DATADIR)
{
::std::vector< ::rtl::OUString > aSubElemNames;
subStorage->getElementNames(aSubElemNames);
if(!aSubElemNames.empty())
{
::std::vector< ::rtl::OUString >::const_iterator aSubIter = aSubElemNames.begin();
::std::vector< ::rtl::OUString >::const_iterator aSubEnd = aSubElemNames.end();
while(aSubIter != aSubEnd)
{
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xSubInputStream =
subStorage->openInputStream(*aSubIter);
if(xSubInputStream.is())
{
::com::sun::star::xml::sax::InputSource inputSource;
inputSource.sSystemId = *aSubIter;
inputSource.aInputStream = xSubInputStream;
m_xSaxParser->parseStream(inputSource);
}
++aSubIter;
}
}
}
}
}
}
++aIter;
}
endUOFRootXML();
m_xExtDocHdl->endDocument();
return bRet;
}
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > UOF2Merge::getMergedInStream() const
{
return m_xPipeInStream;
}
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XExtendedDocumentHandler > UOF2Merge::getSaxWriter()
{
return m_xExtDocHdl;
}
void UOF2Merge::startUOFRootXML( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xUOFXMLInStream )
{
::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XDocumentHandler > xUOFXMLDocHdl(new UOF2UOFXMLDocMergeHandler(*this));
m_xSaxParser->setDocumentHandler(xUOFXMLDocHdl);
::com::sun::star::xml::sax::InputSource inputSource;
inputSource.sSystemId = UOFELEMNAME;
inputSource.aInputStream = xUOFXMLInStream;
m_xSaxParser->parseStream(inputSource);
}
void UOF2Merge::endUOFRootXML()
{
m_xExtDocHdl->endElement( ::rtl::OUString::createFromAscii("uof:UOF_0000") );
}
void UOF2Merge::addNamespace( const ::rtl::OUString& rName, const ::rtl::OUString& rURL )
{
if(rName.getLength()> 0 && rURL.getLength() > 0)
{
m_aNamespaceMap.insert( ::std::map< ::rtl::OUString, ::rtl::OUString >::value_type( rName, rURL ));
}
}
bool UOF2Merge::isInsertedNamespace( const ::rtl::OUString& rName ) const
{
bool bRet = false;
typedef ::std::map< ::rtl::OUString, ::rtl::OUString >::const_iterator NMSIter;
NMSIter aFoundIter = m_aNamespaceMap.find( rName );
if(aFoundIter != m_aNamespaceMap.end())
bRet = true;
return bRet;
}
bool UOF2Merge::getBase64Codec( ::rtl::OUStringBuffer& rBuffer, const ::rtl::OUString& rObjPath )
{
bool bRet = false;
if(rObjPath.getLength())
{
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xInputStream =
m_rUOF2Storage.getMainStorageRef()->openInputStream(rObjPath);
if(xInputStream.is())
{
sal_Int32 nMax = 512;
::com::sun::star::uno::Sequence< sal_Int8 > aOutSeq;
sal_Int32 nRead = 0;
while(true)
{
::com::sun::star::uno::Sequence< sal_Int8 > aInSeq;
nRead = xInputStream->readBytes(aInSeq, nMax);
if(nRead)
{
sal_Int32 nLen = aInSeq.getLength();
if(nLen)
{
sal_Int32 nOrigLen = aOutSeq.getLength();
aOutSeq.realloc(nOrigLen + nLen);
sal_Int8 * pArray = aOutSeq.getArray() + nOrigLen;
for(sal_Int32 i = 0; i < nLen; ++i)
{
*pArray++ = aInSeq[i];
}
}
}
else
break;
}
if(aOutSeq.getLength() > 0)
{
XMLBase64Codec::encodeBase64(rBuffer, aOutSeq);
bRet = true;
}
}
}
return bRet;
}
}