protected function unmarshall(DOMElement $element)
    {
        try {
            $baseComponent = parent::unmarshall($element);
            $object = new ResponseDeclaration($baseComponent->getIdentifier());
            $object->setBaseType($baseComponent->getBaseType());
            $object->setCardinality($baseComponent->getCardinality());
            $object->setDefaultValue($baseComponent->getDefaultValue());

            $correctResponseElts = $this->getChildElementsByTagName($element, 'correctResponse');
            if (count($correctResponseElts) === 1) {
                $correctResponseElt = $correctResponseElts[0];
                $marshaller = $this->getMarshallerFactory()->createMarshaller($correctResponseElt, array($baseComponent->getBaseType()));
                $object->setCorrectResponse($marshaller->unmarshall($correctResponseElt));
            }

            $mappingElts = $this->getChildElementsByTagName($element, 'mapping');
            if (count($mappingElts) === 1) {
                $mappingElt = $mappingElts[0];
                $marshaller = $this->getMarshallerFactory()->createMarshaller($mappingElt, array($baseComponent->getBaseType()));
                $object->setMapping($marshaller->unmarshall($mappingElt));
            }

            $areaMappingElts = $this->getChildElementsByTagName($element, 'areaMapping');
            if (count($areaMappingElts) === 1) {
                $areaMappingElt = $areaMappingElts[0];
                $marshaller = $this->getMarshallerFactory()->createMarshaller($areaMappingElt);
                $object->setAreaMapping($marshaller->unmarshall($areaMappingElt));
            }

            return $object;
        } catch (InvalidArgumentException $e) {
            $msg = "An unexpected error occured while unmarshalling the responseDeclaration.";
            throw new UnmarshallingException($msg, $element, $e);
        }
    }