private void axisInfoAction() throws DocumentException,
            XmlTypeErrorException {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("properties");
        AxisInfoXmlDriver axisInfoXmlDriver = new AxisInfoXmlDriver(xmlRequest);
        String cubeIdentifier = axisInfoXmlDriver.getCubeIdentifier();
        root.addElement("cube").addText(cubeIdentifier);
        try {
            SchemaClientInterface schemaClient = SchemaClient.getSchemaClient();
            Schema schema = schemaClient.getSchema(cubeIdentifier);
            SortedSet<Dimension> dimensions = schema.getDimensions();
            Element dimensionsNode = root.addElement("dimensions");
            List<String> dimensionNames = axisInfoXmlDriver.getDimensionNames();
            for (String dimensionName : dimensionNames) {
                Element dimensionNode = dimensionsNode.addElement("dimension");
                dimensionNode.addElement("name").addText(dimensionName);
                Dimension correspondingDimension = findCorrespondingDimension(
                        dimensionName, dimensions);
                SortedSet<Level> levels = correspondingDimension.getLevels();
                AxisIterator axisIterator = new AxisIterator(levels);
                String axisesStr = "";
                long axisWithoutMeaning[];
                while (axisIterator.hasNext()) {
                    axisWithoutMeaning = axisIterator.next();
                    if ("Time".equals(dimensionName)) {
                        axisesStr += timeAxisMapper
                                .getAxisWithMeaning(axisWithoutMeaning)
                                + axisDelimiter;
                    } else if ("Area".equals(dimensionName)) {
                        axisesStr += areaAxisMapper
                                .getAxisWithMeaning(axisWithoutMeaning)
                                + axisDelimiter;
                    } else if ("Depth".equals(dimensionName)) {
                        axisesStr += depthAxisMapper
                                .getAxisWithMeaning(axisWithoutMeaning)
                                + axisDelimiter;
                    }
                }
                dimensionNode.addElement("axis").addText(axisesStr);
            }
            root.addElement("success").addText("true");
        } catch (CubeNotExistsException e) {
            root.addElement("success").addText("false");
            Element errorsNode = root.addElement("errors");
            errorsNode.addElement("error").addText("CubeNotExists error");
        } catch (SchemaNotExistsException e) {
            root.addElement("success").addText("false");
            Element errorsNode = root.addElement("errors");
            errorsNode.addElement("error").addText("SchemaNotExists error");
        } catch (CorrespondingDimensionNotExistsException e) {
            root.addElement("success").addText("false");
            Element errorsNode = root.addElement("errors");
            errorsNode.addElement("error").addText(
                    "CorrespondingDimensionNotExists error");
        } catch (AxisWithoutMeaningErrorException e) {
            root.addElement("success").addText("false");
            Element errorsNode = root.addElement("errors");
            errorsNode.addElement("error").addText("AxisWithoutMeaning error");
        }
        this.returnXmlStr = document.asXML();
    }