@Override
    public JList load() {
        if (loaded) return this;

        String body = null;
        try {
            body = JHttpClientUtil.postText(
                    context.getUrl() + JHttpClientUtil.Lists.URL,
                    JHttpClientUtil.Lists.GetList.replace("{listName}", String.format("{%s}", getId())),
                    JHttpClientClient.getWebserviceSopa()
            );
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

        Node listElement;
        Document document;
        try {
            document = DocumentBuilderFactory
                    .newInstance()
                    .newDocumentBuilder()
                    .parse(new ByteArrayInputStream(body.getBytes()));
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

        NodeList nodes = document.getElementsByTagName("List");
        if (nodes.getLength() > 0)
            listElement = nodes.item(0);
        else
            return null;

        JList listData;
        listData = getWeb().getLists().parse((Element) listElement);

        fields = listData.fields;

        try {
            body = JHttpClientUtil.postText(
                    context.getUrl() + JHttpClientUtil.SiteData.URL,
                    JHttpClientUtil.SiteData.GetList.replace("{strListName}", String.format("{%s}", getId())),
                    JHttpClientClient.getWebserviceSopa()
            );
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

        try {
            document = DocumentBuilderFactory
                    .newInstance()
                    .newDocumentBuilder()
                    .parse(new ByteArrayInputStream(body.getBytes()));
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
        NodeList meta = document.getElementsByTagName("sListMetadata");

        if (meta.getLength() > 0) {
            Element data = (Element) meta.item(0);
            if (data.getElementsByTagName("BaseTemplate").getLength() > 0) {
                String baseTemplate = data.getElementsByTagName("BaseTemplate").item(0).getFirstChild().getNodeValue();

                if (Pattern.matches("[-]?\\d+", baseTemplate)) {
                    listData.attributes.put("BaseTemplate", new JContentValue(getWeb().getLists().getBaseTemplateName(Integer.parseInt(baseTemplate))));
                } else {
                    listData.attributes.put("BaseTemplate", new JContentValue(baseTemplate));
                }
            }
        }

        mergeAttribute(listData.attributes);
        loaded = true;

        return this;
    }