blob: f4daf5b144afd6c80af6496cb7dde3ebb68f98c9 [file] [log] [blame]
// Copyright 2003-2004 The Apache Software Foundation.
// (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved
//
// 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.
// !!! This include file must be first thing in file !!!
#include "../../platforms/PlatformAutoSense.hpp"
#include "HexBinary.hpp"
AXIS_CPP_NAMESPACE_START
HexBinary::HexBinary()
{
}
HexBinary::~HexBinary()
{
}
HexBinary::HexBinary(const xsd__hexBinary* value)
{
if (value)
{
setNil(false);
serialize(value);
}
}
XSDTYPE HexBinary::getType()
{
return XSD_HEXBINARY;
}
xsd__hexBinary* HexBinary::getHexBinary()
{
if (isNil())
{
return NULL;
}
else
{
return deserializeHexBinary(m_Buf);
}
}
void * HexBinary::getValue()
{
return (void*) getHexBinary();
}
AxisChar* HexBinary::serialize(const xsd__hexBinary * value) throw (AxisSoapException)
{
MinLength* minLength= getMinLength();
if (minLength->isSet())
{
if (value->getSize() < minLength->getMinLength())
{
AxisString exceptionMessage =
"Length of value to be serialized is shorter than MinLength specified for this type. Minlength = ";
AxisChar length[100];
sprintf(length, "%d", minLength->getMinLength());
exceptionMessage += length;
exceptionMessage += ", Length of value = ";
sprintf(length, "%d", value->getSize());
exceptionMessage += length;
exceptionMessage += ".";
delete minLength;
throw AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minLength;
MaxLength* maxLength = getMaxLength();
if (maxLength->isSet())
{
if (value->getSize() > maxLength->getMaxLength())
{
AxisString exceptionMessage =
"Length of value to be serialized is longer than MaxLength specified for this type. Maxlength = ";
AxisChar length[100];
sprintf(length, "%d", maxLength->getMaxLength());
exceptionMessage += length;
exceptionMessage += ", Length of value = ";
sprintf(length, "%d", value->getSize());
exceptionMessage += length;
exceptionMessage += ".";
delete maxLength;
throw AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxLength;
Length* length= getLength();
if (length->isSet())
{
if (value->getSize() != length->getLength())
{
AxisString exceptionMessage =
"Length of value to be serialized is not the same as Length specified for this type. Length = ";
AxisChar lengthAsString[100];
sprintf(lengthAsString, "%d", length->getLength());
exceptionMessage += lengthAsString;
exceptionMessage += ", Length of value = ";
sprintf(lengthAsString, "%d", value->getSize());
exceptionMessage += lengthAsString;
exceptionMessage += ".";
delete length;
throw AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete length;
char* serializedValue = new char[value->getSize() * 2 + 1];
int size = 0;
xsd__unsignedByte * pTemp = value->get(size);
Hex_Encode (serializedValue, pTemp, size);
serializedValue[value->getSize() * 2] = 0;
IAnySimpleType::serialize(serializedValue);
delete [] serializedValue;
return m_Buf;
}
xsd__hexBinary * HexBinary::deserializeHexBinary(const AxisChar* valueAsChar) throw (AxisSoapException)
{
xsd__hexBinary * value = new xsd__hexBinary();
int size = strlen (valueAsChar) / 2;
xsd__unsignedByte * pTemp = new xsd__unsignedByte[size + 1];
Hex_Decode (pTemp, valueAsChar);
pTemp[size] = 0; // Null terminate so it could be used as a string
value->set(pTemp, size);
delete [] pTemp;
return value;
}
MinLength* HexBinary::getMinLength()
{
return new MinLength();
}
MaxLength* HexBinary::getMaxLength()
{
return new MaxLength();
}
Length* HexBinary::getLength()
{
return new Length();
}
AXIS_CPP_NAMESPACE_END