Почему SAX Parser не читает XML из ASP.Net API? - PullRequest
0 голосов
/ 13 мая 2019

Мне не удается заставить работать мое приложение, когда я переключаюсь на ASP.Net Web API.Все отлично работает, когда я использую простой ответ страницы в качестве моего XML с сервера.Я подозреваю, что это первая строка в XML, возвращенная "ArrayOf".StartDocument срабатывает, но startElement никогда не срабатывает.Когда я пытаюсь просмотреть XML, возвращенный в Android, он просто выдает «true», а не то, что возвращает сервер.Я не знаю, почему он не будет читать XML сейчас.Буду признателен за любую информацию или помощь.

Я повсюду смотрел, как удалить тег ArrayOf и создал пользовательские средства форматирования XML.В итоге я получил тот же результат.Я пробовал DataContracts, а также пользовательские форматеры XML.Хотя они, кажется, удаляют пространство имен, они никогда не удаляли раздражающий тег «ArrayOf».В любом случае я решил пойти дальше и просто поработать с ним, но проблема все еще описана выше.

Мой XML, созданный сервером:

<ArrayOfStartupCheck xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <StartupCheck>
    <AndroidCurrentVersion>2.2</AndroidCurrentVersion>
    <AndroidReleaseDate>3/17/2019 12:00:00 AM</AndroidReleaseDate>
    <AndroidReleaseNotes>Bug Updates</AndroidReleaseNotes>
    <iPhoneCurrentVersion>1.0</iPhoneCurrentVersion>
    <iPhoneReleaseDate>6/16/2017 12:00:00 AM</iPhoneReleaseDate>
    <iPhoneReleaseNotes>Bug Updates</iPhoneReleaseNotes>
  </StartupCheck>
</ArrayOfStartupCheck>

Я использую DefaultHandler для SaxParsing.

Просто начало моего кода Sax Handler, поскольку Stack заявляет, что не должен публиковать весь файл:

private boolean in_androidcurrentversion = false;
private boolean in_androidreleasedate = false;
private boolean in_androidreleasenotes = false;

StringBuilder textContent = new StringBuilder();

private ParsedDataSet myParsedExampleDataSet = new ParsedDataSet();

// ===========================================================
// Getter & Setter
// ===========================================================

public ParsedDataSet getParsedData() {
    return this.myParsedExampleDataSet;
}

// ===========================================================
// Methods
// ===========================================================
@Override
public void startDocument() throws SAXException {
    this.myParsedExampleDataSet = new ParsedDataSet();
}

@Override
public void endDocument() throws SAXException {
    // Nothing to do
}

@Override
public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes atts) throws SAXException {
    super.startElement(uri, localName, qName, atts);
    if (localName.equalsIgnoreCase("androidcurrentversion")) {
        textContent.delete(0, textContent.length());
        this.in_androidcurrentversion = true;
    }

и так далее ... Опять же, просто никогда не добирается до "startElement".Я использую тот же код с простыми публикациями страниц и возвращаю XML вручную, и все работает хорошо, только когда я использую ASP.Net WebAPI v2, я получаю эту проблему.Единственное, что я вижу по-другому, это первая строка «ArrayOf», но это все еще тег, поэтому не уверен, почему он даже не сработает.

Использование Below в качестве моего URLConnection:

 String response = "false";
            URL url = null;
            try {
                url = new URL(myURL);

                HttpURLConnection urlConnection = null;
                urlConnection = (HttpURLConnection) url.openConnection();
                //NEW
                urlConnection.setFollowRedirects(false);
                urlConnection.setConnectTimeout(3000);
                //NEW
                urlConnection.setRequestMethod("GET");
                urlConnection.setDoOutput(true);

                InputStream in = new BufferedInputStream(urlConnection.getInputStream());

                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                StringBuilder result = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }
                response = result.toString();
                urlConnection.disconnect();
            } catch (java.net.SocketTimeoutException e) {
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

response просто "true".

Когда я читаю ответ сервера через Android, он просто возвращает "true", но не сам XML, когда я использую Postman или URL-адрес напрямую, XML в порядке, как показано выше.Просто для дальнейшего понимания, я использую Async в своем API, с которым у меня никогда раньше не было проблем, но это было единственное другое изменение по сравнению с предыдущим.Заранее благодарим за понимание.

...