blob: ce755714886bb81cdfbf2d61025ed73d8113643d [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.
*/
/*
* $Id: XProtoType.cpp 568078 2007-08-21 11:43:25Z amassari $
*/
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
#include <xercesc/internal/XProtoType.hpp>
#include <xercesc/internal/XSerializeEngine.hpp>
#include <xercesc/util/XMLString.hpp>
XERCES_CPP_NAMESPACE_BEGIN
/***
*
* write the length of the class name
* write the class name
*
***/
void XProtoType::store(XSerializeEngine& serEng) const
{
int strLen = XMLString::stringLen((char*)fClassName);
serEng << strLen;
serEng.write(fClassName, strLen * sizeof(XMLByte));
}
/***
*
* To verify that the content in the binary stream
* is the same as this class
*
***/
void XProtoType::load(XSerializeEngine& serEng
, XMLByte* const inName
, MemoryManager* const manager)
{
if (!inName)
{
ThrowXMLwithMemMgr(XSerializationException
, XMLExcepts::XSer_ProtoType_Null_ClassName, manager);
}
// read and check class name length
int inNameLen = XMLString::stringLen((char*)inName);
int classNameLen = 0;
serEng >> classNameLen;
if (classNameLen != inNameLen)
{
XMLCh value1[17];
XMLCh value2[17];
XMLString::binToText(inNameLen, value1, 16, 10, manager);
XMLString::binToText(classNameLen, value2, 16, 10, manager);
ThrowXMLwithMemMgr2(XSerializationException
, XMLExcepts::XSer_ProtoType_NameLen_Dif
, value1
, value2
, manager);
}
// read and check class name
XMLByte className[256];
serEng.read(className, classNameLen*sizeof(XMLByte));
className[classNameLen] = '\0';
if ( !XMLString::equals((char*)className, (char*)inName))
{
//we don't have class name exceed this length in xerces
XMLCh name1[256];
XMLCh name2[256];
XMLString::transcode((char*)inName, name1, 255, manager);
XMLString::transcode((char*)className, name2, 255, manager);
ThrowXMLwithMemMgr2(XSerializationException
, XMLExcepts::XSer_ProtoType_Name_Dif
, name1
, name2
, manager);
}
return;
}
XERCES_CPP_NAMESPACE_END