SaxParseException в eclipse: структуры документов XML должны начинаться и заканчиваться в одном и том же объекте

Я использую API last.fm для JAVA, который можно найти здесь .

У меня есть огромный набор данных, в котором я использую только файл с историей исполнителя пользователя. и играет. Я написал код на Java, который извлекает имена исполнителей и возвращает похожих исполнителей на основе метода Artist.getSimilar().

Я запускал его один раз, но не для всех художников. Я прекратил отладку на полпути. Однако в следующий раз мои результаты возвращались из кеша, и запрос больше не отправлялся на веб-сервер. Проблема в том, что на этот раз я получаю результаты только до исполнителя, у которого я закончил результаты. Я попытался использовать другой метод для artists=Artist.getTopAlbums(), где остановился на полпути и в следующий раз столкнулся с той же проблемой. Ошибка, которую я получаю:

[Fatal Error] :513:9: <strong>XML document structures must start and end within the same entity.</strong>
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
Caused by: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)

и куча других исключений, которые здесь не важны.

Я попытался переустановить eclipse, запустить eclipse в режиме -clean и очистить рабочее пространство. Ничего не сработало. Я тоже создал новую рабочую область, но кеш продолжает возвращаться. Я использую Eclipse 3.8. Может быть, поможет эффективный способ очистки кеша в eclipse? Как бы я это сделал. Кажется, ничего не работает. (Также нет возможности вручную очистить кеш в Window>Preferences, как предлагалось во многих статьях).

Или мне нужно сделать что-то еще? Любая помощь горячо приветствуется. Заранее спасибо.

Мой java-код (который работает отлично, без ошибок):

//in main
BufferedReader inp = new BufferedReader (new InputStreamReader(System.in));
String sinput=inp.readLine();
System.out.println(sinput+"\t \t \t"+getSimilarartists(sinput));


//to fetch similar artists
public static StringBuilder getSimilarartists(String artist){
String key = "af2bfbcb4dd49870fdb8e92f128f4ff7";
StringBuilder sb = new StringBuilder();
String art=(Artist.getSimilar(artist, key)).toString();
int i=0;
while(i<art.length()-5){
    if((art.substring(i, (i+4))).equalsIgnoreCase("name")){
        i=i+6;

        while(art.charAt(i)!='\''){
            sb.append(art.charAt(i));
            i++;
        }

        break;
    }
    i++;
}
return sb;
}  

Вывод (только последние несколько строк):

hans zimmer;     I recommend=Hans Zimmer & James Newton Howard<br>
nelly furtado;   I recommend=Jennifer Lopez<br>
madonna;     I recommend=Kylie Minogue<br>
blink-182;   I recommend=Box Car Racer<br>
dave gahan;  I recommend=Depeche Mode<br>
kelly clarkson;  I recommend=Carrie Underwood<br>
lucie silvas;    I recommend=Delta Goodrem<br>
natalie imbruglia;   I recommend=Melanie C<br>
michelle branch;     I recommend=The Wreckers<br>
delta goodrem;   I recommend=Ricki-Lee<br>
new order;   I recommend=Electronic<br>
seal;    I recommend=Simply Red<br>
atomic kitten;   I recommend=Liberty X 

 *** (this is where I had terminated my previous run) ***

[Fatal Error] :513:9: XML document structures must start and end within the same entity.<br>
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
    at de.umass.lastfm.Caller.call(Caller.java:268)<br>
    at de.umass.lastfm.Caller.call(Caller.java:189)<br>
    at de.umass.lastfm.Caller.call(Caller.java:185)<br>
    at de.umass.lastfm.Artist.getSimilar(Artist.java:144)<br>
    at de.umass.lastfm.Artist.getSimilar(Artist.java:132)<br>
    at Recommender.getSimilarartists(Recommender.java:89)<br>
    at Recommender.main(Recommender.java:58)<br>
Caused by: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.<br>
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
    at     <br>
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)<br>
    at de.umass.lastfm.Caller.createResultFromInputStream(Caller.java:324)<br>
    at de.umass.lastfm.Caller.call(Caller.java:256)<br>
    ... 6 more

person HackCode    schedule 18.04.2014    source источник


Ответы (2)


Подобные ошибки обычно указывают на плохо отформатированный документ:

Вызвано: org.xml.sax.SAXParseException; номер строки: 513; номер столбца: 9; Структуры XML-документов должны начинаться и заканчиваться в одном и том же объекте. в

Несколько вещей, которые вы можете сделать, чтобы отладить это:

  1. Распечатайте XML-документ в журнал и пропустите его через какой-нибудь валидатор XML.
  2. Убедитесь, что нет недопустимых символов (например, символов UTF-16 в документе UTF-8).
person Mike Thomsen    schedule 18.04.2014
comment
Я не имею ничего общего с файлом XML. Как я уже сказал, код отлично работает для любого метода, указанного в API, до тех пор, пока я не завершу его, пока он еще работает. В этом случае в следующий раз он будет отображаться только до того результата, на котором я его прервал. - person HackCode; 18.04.2014

Ни Eclipse, ни Java не кэшируют веб-контент при выполнении обычного ввода-вывода. Однако содержимое может быть кэшировано в другом месте. Возможно, это делает API de.umass.lastfm, который вы используете. Возможно, что-то в вашей ОС или в вашей сети.

person Konstantin Komissarchik    schedule 18.04.2014
comment
Конечно, это так. Автор предполагает, что Eclipse кэширует веб-запросы. Я заявляю, что это не так, и указываю на другие места для поиска. Ответ не обязательно должен предоставлять готовое решение, чтобы быть полезным. - person Konstantin Komissarchik; 18.04.2014
comment
Я согласен с @Deduplicator. Ответ на SO означает не просто любой полезный ответ, он определяется как нечто, что дает ответ на вопрос (не в смысле ответа или ответа, а в смысле решения проблемы, поднятой в вопросе). Замечание, устраняющее неправильное представление в вопросе и дающее расплывчатый совет о том, на какие общие области следует обратить внимание при поиске решения, не является действительным ответом. Это должен быть комментарий. - person Adi Inbar; 18.04.2014
comment
Мой ответ напрямую касается вопросов, поднятых в вопросе. Он не дает полного решения, но с натяжкой можно сказать, что он не отвечает на поставленные вопросы. - person Konstantin Komissarchik; 18.04.2014
comment
Что ж, он стоит в очереди на рассмотрение LQP (где я с ним столкнулся), и текущее голосование 4-0 в пользу удаления. Вы, кажется, интерпретируете ответ в смысле ответа. Я не говорил, что это не обращается к проблемам, затронутым в вопросе; Я говорю, что ответ не означает какой-либо ответ, касающийся проблем, указанных в вопросе. ОП спрашивает, почему это происходит, и этот ответ даже частично не объясняет, почему, в основном он просто говорит, что Java и Eclipse не будут создавать эту проблему, поэтому ищите в другом месте. Я не могу рассматривать это как ответ. Решение за сообществом... - person Adi Inbar; 18.04.2014
comment
По вашему определению ответа половина ответов на SO не будет соответствовать требованиям. На практике это ответ, если он отвечает на некоторые из поднятых вопросов, как и мой. Принятый ответ - это тот, который приближает к полному решению, что часто невозможно. Так что лучше иметь частичный ответ или не ответы? - person Konstantin Komissarchik; 19.04.2014
comment
Мы можем не согласиться с этим, но это определенно не потому, что мое определение ответа искажено. Я бы оценил, что по моему определению более 99% ответов на SO, которые не удаляются, соответствуют требованиям. Это основано на том, что вы сделали тысячи обзоров и почти всегда возвращаетесь, чтобы проверить, как проголосовали другие, и на том, что вы подняли примерно 300 флажков «не ответ» и только один был отклонен. Это довольно четкое указание на то, что мое понимание того, что является ответом, а что нет, не противоречит стандартам сообщества. - person Adi Inbar; 19.04.2014
comment
Кстати... я действительно думаю, что частичные ответы лучше, чем никаких ответов, но частичный ответ частично объясняет, почему это происходит. Мне действительно трудно понять, как просто сказать, что Java и Eclipse не кэшируют, искать причину в другом месте, можно считать ответом. По этому стандарту SO в конечном итоге будет напоминать все эти технические форумы, где вам нужно просеивать бесконечные комментарии, указатели и обсуждения, чтобы увидеть, не зарыто ли где-нибудь решение. Исключительно редко можно увидеть нечто подобное, опубликованное пользователем с высокой репутацией в качестве ответа, а не комментария. - person Adi Inbar; 19.04.2014