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

        String body = null;
        try {
            body = JHttpClientUtil.postText(
                    context.getUrl() + JHttpClientUtil.Views.URL,
                    JHttpClientUtil.Views.GetView
                            .replace("{listName}", list.getTitle())
                            .replace("{viewName}", String.format("{%s}", getName())),
                    JHttpClientClient.getWebserviceSopa()
            );
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

        Pattern pattern = Pattern.compile("<GetViewResult>(.+)</GetViewResult>", Pattern.MULTILINE);
        Matcher matcher = pattern.matcher(body);
        if (matcher.find()) {
            xml = matcher.group(1);
        }

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

        List<String> fields = new ArrayList<String>();
        NodeList vf = document.getElementsByTagName("ViewFields");
        if (vf.getLength() > 0) {
            Element item = (Element) vf.item(0);
            NodeList childNodes = item.getChildNodes();
            for (int i = 0; i < childNodes.getLength(); i++) {
                if (Node.ELEMENT_NODE != childNodes.item(i).getNodeType()) continue;
                Element field = (Element) childNodes.item(i);
                fields.add(field.getAttribute("Name"));
            }
        }

        viewFields = fields.toArray(new String[fields.size()]);
        loaded = true;

        return this;
    }