MarkLogic REST PUT для добавления документа возвращает внутреннюю ошибку сервера 500

Кто-нибудь получил внутреннюю ошибку сервера 500 при вставке XML-документа в MarkLogic (HTTP REST PUT)

Код:

    static public bool InsertXmlDocument(string uri, string data, string databaseName = "Documents")
    {
        if (String.IsNullOrWhiteSpace(uri) || String.IsNullOrWhiteSpace(data))
        {
            return false;
        }

        WebClient client = new WebClient(); 
        client.Credentials = new NetworkCredential("admin", "admin");

        client.Headers.Add("Content-Type", "application/xml");

        client.UploadString(new Uri($"http://localhost:8002/LATEST/documents?database={databaseName}&uri={uri}" ), "PUT",  data );

        return true;
    }

person Aries On The Cusp    schedule 03.08.2018    source источник
comment
Включите полное сообщение об ошибке, значение расширенного URL-адреса в UploadString (для проверки корректности URL-адреса) и фрагмент данных. Также просмотрите журналы ошибок сервера и приложений на предмет каких-либо событий в это время.   -  person DALDEI    schedule 03.08.2018


Ответы (2)


Вы не должны использовать порт 8002. Это порт REST Management API для административных операций. Для клиентских API вам понадобится экземпляр REST API. Один из них предустановлен на порт 8000, или вы можете создать свой собственный, следуя инструкциям здесь:

http://docs.marklogic.com/guide/rest-dev/service#id_12021

Кроме того, если вы используете клиентский API REST из Java, вам, вероятно, следует вместо этого рассмотреть возможность использования клиентского API Java, который представляет собой слой Java поверх клиентского API REST. См. http://docs.marklogic.com/guide/java.

person kcoleman    schedule 04.08.2018

Я посмотрел на сервере ErrorLog.txt, но там нет информации об ошибке. URL-адрес действителен, потому что я могу вставлять документы с другим XML.

Оказывается, если в ваших значениях XML есть какие-либо неэкранированные элементы (кавычки, амперсанд и т. д.), то MarkLogic выдает внутреннюю ошибку сервера 500.

В моей книге это действительно отстой, они должны возвращать ошибку, говорящую о недопустимом XML.

В моем случае у меня была одна кавычка в каком-то тексте в пределах 5000 строк XML. Очень раздражает выслеживать это

person Aries On The Cusp    schedule 03.08.2018
comment
MarkLogic будет спотыкаться только о недопустимых символах utf-8, неэкранированных знаках «меньше» и амперсанд, а также о неизвестных именованных объектах. Он не должен спотыкаться об одинарные кавычки, если только вы не говорите о apos, а ссылаетесь на символы юникода, такие как левые и правые кавычки. Вы уверены, что виновником была одна цитата? - person grtjn; 09.08.2018
comment
Я согласен, что 500 менее элегантен. Я могу создать внутренний тикет, если у вас есть небольшой пример, которым вы можете поделиться. - person grtjn; 09.08.2018