Не удалось запустить нулевые данные ncalayer в файле журнала
Обновлено: 21.11.2024
Примечание Перев.: Кому-то пришлось сделать перевод этой статьи, несмотря на то, что она достаточно старая (2015 г.), т. к. в ней показана очень важная особенность работа с памятью в Rust — с помощью безопасного (не помеченного как небезопасный) кода можно создавать утечки памяти . Это должно отрезвить людей, верящих во всеохватывающую проверку заимствований.
Спойлер - внутри про невозможность отслеживания циклических ссылок, а также старые болезни некоторых типов от std, на момент переноса благополучно вылеченные.< /i>
Несмотря на наличие в Книге главы о безопасном коде (спасибо, что напомнили ozkriff), а также пояснительной статьи русскоязычного сообщества (спасибо для напоминания mkpankov), я решил перевести, чтобы наглядно продемонстрировать всю серьезность непонимания особенностей управления памятью Rust.
Скорее всего, эта статья ранее не переводилась из-за к очень конкретным условиям авторизации или, который НЛО не пропустит в обращении. По этой причине перевод не совсем дословный.
Утечка
Как гром среди ясного неба, ошибка с циклическими ссылками на std::thread::JoinGuard погрузила сообщество в пучину экзистенциального ужаса. Если вы следите за новостями и уже в курсе об утечке, можете смело пропустить этот раздел и перейти к следующему. Если вы следите за моими комментариями в сообществе, то читать вам тут в принципе нечего, можете смело закрывать окно и возвращаться к дальнейшему изучению моих комментариев.
С помощью циклических ссылок можно пропустить JoinGuard, в результате чего поток с областью действия может получить доступ к уже освобожденной области памяти.
Крайне серьезное заявление, так как все используемые API помечены как безопасные, что должно исключать такое поведение безопасного кода в принципе.
Основное внимание уделяется thread::scoped , который создает поток с доступом к окну стека другого потока, безопасность которого статически гарантируется компилятором. Идея безопасности заключается в JoinGuard , возвращаемом thread::scoped , чей деструктор блокирует выполнение ожидающего стека и стека, владеющего потоком; соответственно, ничто, кроме того, что передано ожидаемому потоку, не может пережить этот JoinGuard. Это позволяет вам реализовать довольно полезные вещи, такие как:
Тут мы проделываем какую-то полезную работу для каждого из десяти элементов массива в отдельном потоке (ну типа как. Вот только пример, сами представьте себе там пейлоад.). Волшебным образом Rust может статически гарантировать безопасность доступа к данным, даже не зная, что именно происходит в дочерних потоках! Ему просто нужно увидеть массив (Join) JoinGuard потоков, которые заимствуют v, соответственно, v не может умереть до окончания потоков. (А точнее, Rust не знает о самом массиве, ему достаточно, чтобы потоки занимали v - даже если потоки вообще пусты).
И это очень здорово. И увы, неправильно.
Предполагается, что деструкторы (далее — реализация Drop — прим. пер.) гарантированно выполняются в безопасном, не помеченном небезопасном коде. Что уж говорить, ваш покорный слуга, как и многие в общине, вырос с верой в этот постулат. В конце концов, у нас даже есть отдельная функция, которая специально удаляет связь с элементом без вызова деструктора, mem::forget , и в названии этого постулата она намеренно помечена как небезопасная!
Как оказалось, это всего лишь отголоски старых вариантов API. На самом деле mem::forget в стандартной библиотеке в некоторых местах используется в безопасном коде. И если почти все эти места впоследствии были отнесены к ошибкам реализации, то одно оставшееся является достаточно принципиальным. Это rc::Rc .
Rc — это интеллектуальный указатель со счетчиком ссылок. Это очень просто - поместите в конструктор Rc::new данные, чтобы разделить их между несколькими ссылками и использовать. clone() ( clone() ) Rc - счетчик увеличивается. Удалить ( drop() ) клон - счетчик уменьшается. Все работает только за счет заимствованного чекера — отслеживание жизней обеспечивает освобождение ссылок на данные до тех пор, пока не будет удален Rc, через который они (ссылки) получаются.
Сам Rc совсем торт — благодаря принципу счетчика мы работаем только с обращениями к внутренностям, сами данные остаются на месте в плане освобождения памяти, прочитать что-то вне этой памяти невозможно. за исключением случаев внутренней изменчивости. Хотя распределение копий ссылок на данные в Rust подразумевает неизменяемость (данные, а не ссылки), сами данные все же можно изменить, как исключение из правил. Для этих целей служит Cell, внутренности которого можно менять даже в случае множественного доступа. Собственно, поэтому типы Cell помечены как не потокобезопасные. Для потоков есть sync::Mutex .
Теперь давайте смешаем Rc с drop и напишем безопасно забыть :
Похоже на лютую ересь. Короче говоря, вы можете создавать циклически зависимые читаемые ссылки с помощью Rc и RefCell. Суть в том, что деструктор типа внутри Leak никогда не будет вызван, хотя ссылок на Rc у нас больше нет. В принципе, отсутствие вызова деструктора само по себе не страшно; вы также можете завершить программу извне или работать в бесконечном цикле. Но не в этом случае — Rc сказал нам, что это вызвало деструктор. Это даже можно проверить:
Это работает. Теперь нам нужно понять проблему из исходного тикета, вызвавшего панику. Сократите пример из тикета до следующего:
Мы раскрыли неопределенное поведение.
И это, несомненно, дыра в стандартной библиотеке Rust, поскольку невозможность use-after-free и гонки данных вроде бы обещана и статически гарантирована, а мы добились < em>оба из них с тривиальным примером. Возникает вопрос - что именно было сделано не так. Исходный билет, как и ожидалось, бросает тень на thread::scoped , поскольку он был создан разработчиком компилятора, который на 100 % знает о возможности утечки деструктора из «безопасного» кода.
Это сразу же вызвало волну недовольства в сообществе — до этого момента они видели утечки только в unsafe . thread::scoped стабилизирован. mem::forget отмечен как небезопасный , только потому, что ни в коем случае, никогда, ни в коем случае и абсолютно не может вытекать из-под небезопасного !
После судебного разбирательства в истоках бага выявилось стечение обстоятельств:
- Обмен ссылками
- Внутренняя изменчивость
- Rc принимает нестатические данные (не 'static )
в котором и не более того проявляется ошибка. Это сразу привело к появлению личностей (увы, и меня тоже), требующих в той или иной форме запрета на существование любого сочетания этих обстоятельств на уровне компилятора. Чтобы вы понимали уровень отчаяния — даже был настойчивый запрос на внутренний тип Leak, помечающий возможность утечки деструктора в сейф.
Внимание. Выпуск 1.0 через три недели , времени на реализацию вышеописанного просто нет. Выводы единственно правильные — убрать mem::forget из unsafe (так как он ничего не делает тайно), переделать thread::scoped . Соответствующие RFC:
Обратите внимание: Rust в принципе никогда не гарантирует отсутствие утечек . Утечки, как и гонки данных, — понятие, не имеющее четких границ, поэтому практически неизбежное. Если вы что-то помещаете в HashMap и никогда не спрашиваете — это тоже своего рода утечка. Выделите что-нибудь в стеке, затем запустите бесконечный цикл — и там тоже. Любой случай нагромождения данных и последующего забывания об их существовании — это та самая утечка, которая почему-то вызывает панику у людей в таком виде. Ошибкой можно считать данные о том, что вы забыли вызвать деструктор при обычном "безопасном" выполнении, потому что с точки зрения статического анализа этих данных не существует.
Что делать?
Таким образом, я был подавлен и растерян. Работа с коллекциями в моем понимании всегда подразумевала гарантированное выполнение деструкторов. Появились отличные возможности собрать дескриптор сколь угодно сложного и зависимого типа, который действует прозрачно, но скрывает все внутренности, и корректно разбирать его при удалении. Однако при работе с временем жизни Rust это гарантировало, что неопределенное состояние данных типа вне этого дескриптора является статически неразделимым! То есть Rust еще более беззаботный, чем C!
Типичный пример тому — Vec::drain_range :
У него даже раскрутка работает корректно, класс! И деструктор не работает, см.:
Не круто. Я порылся в коде коллекций стандартной библиотеки в поисках чего-то, что надеется на деструктор для безопасности, и, к счастью, ничего не нашел (что, конечно, совсем не значит, что его там нет). В частности, я искал что-то, что вписывалось бы в следующую иерархию вредоносности текущего деструктора:
- Нет деструктора — нет утечки: примитивы, указатели
- Утечка системных ресурсов на самом деле не проблема: большинство коллекций и интеллектуальных указателей связаны с примитивами, которые во время утечки имеют большую утечку
- Простая утечка деструктора неприятна, но не фатальна: коллекции и умные указатели вокруг структур
- Мир находится в неопределенном, но безопасном состоянии - уверенный "пыщ" в шаге: RingBuf::drain должен очистить коллекцию после того, как ее ссылка на итератор стока перестанет существовать, но в настоящее время это гарантируется только деструктором. Сама коллекция непротиворечива.
- Мир сломан — неприемлемо: вышеупомянутый Vec::drain_range
В целом, вы должны перемещать зависимость от деструктора как можно дальше в соответствии с этой иерархией, за исключением кода из последней категории из всех API, которые не помечены как небезопасные.
Эта иерархия основана на предположение, что текущий деструктор в работающей программе является ошибкой. Ни больше, ни меньше, код приложения обязан предполагать, что в его произвольном месте или при адекватных условиях не будет утечек. Как обычная практика в Rust, сторонние библиотеки обязаны подтвердить невозможность утечек.
Тот факт, что в API есть код, который может вызвать утечку, например Rc , не следует рассматривать как ошибку API или его реализации. Тем более, если утечка возможна только при определенных условиях, созданных конечным потребителем. Несмотря на удаление mem::forget из unsafe и возможность его вызова в безопасном коде, в общих случаях нужно помнить, что последствия его вызова небезопасны.
Rust может преподнести неприятный сюрприз
( скорее всего из-за этого сайта мало цитируется эта статья - прим. пер. )
Как мы можем защитить использование Vec::drain_range и поднять его выше в иерархии? Добавление следующей строки в конструктор дренажа_диапазона. Все так просто!
Теперь, если DrainRange , мы будем сливать деструкторы элементов, которые нужно поднять, потому что мы полностью потеряли значения, сдвинутые в начало вектора. Это вполне относится к разряду "неопределенное, но безопасное состояние", ну и возможные и другие утечки тоже добавляются. Все еще плохо, но уже большой прогресс в отношении use-after-free, который случился раньше!
Это то, что я называю паттерном «Poop Your Pants (PPYP) pattern» — чтобы хотя бы частично спасти положение дизайнера, если не сработает деструктор. Почему такое тупое название? Раньше я представлял себе жизненный цикл между конструктором и деструктором как пищеварительный процесс. Что-то можно съесть (конструктор), обработать и сходить в туалет (деструктор). Если деструктор исчезнет, унитаз никогда не засветится. В зависимости от жизненной ситуации (деструктора) возможны различные последствия:
- Типы разбиты на структурном уровне - все, конец, больше никто никуда не уходит. Где хирург?
- Типы кажутся целыми, но система уже повреждена ими и сломается в любой момент, если запор затянется
- Типы большие и сложные - есть вероятность, что внутри нет ничего неприятного
- Типы-безопасные наркотики — при несоблюдении инструкций по технике безопасности вам могут показать вертолет и привести к худшим последствиям, но при определенных условиях вы можете выжить и вернуться в строй.
- Виды опасных наркотиков - возможны передозировка и смерть, следует максимально контролировать.
На самом деле паттерн "Лучше обосраться" - это следующее отклонение от обычного пищеварительного процесса: если вы съели что-то неожиданное, будьте готовы к "преждевременным неприятностям". Обычно неприятности не настигают, и вы успеваете дойти до туалета согласно плану его посещения. Но если все-таки настигли, то лучше рассыпаться и конфузиться, чем впасть в беспамятство и очнуться на столе у хирурга. Шаблон подчеркивает следующее:
В некоторых случаях установленное антивирусное программное обеспечение может заменять сертификаты SSL для веб-браузеров, чтобы сканировать защищенные соединения. Если корневые сертификаты не были установлены или настроены неправильно, могут возникнуть проблемы с подключением к NCALayer. Ниже вы можете увидеть пример того, как отключить такую проверку для антивируса Касперского.
В зависимости от типа и версии продукта "Лаборатории Касперского" действия могут различаться.
- Перейдите в антивирус "Настройки".
- Выберите "Дополнительно" на боковой панели и нажмите "Сеть".
- В разделе "Проверять защищенные подключения" выберите параметр "Не проверять защищенные подключения".
Для обеспечения корректной работы NCALayer в Windows XP требуется среда выполнения Java не выше 1.8.0_144. Необходимость связана с тем, что Windows XP устарела и официально не поддерживается разработчиками программного обеспечения. Не рекомендуется использовать устаревшее программное обеспечение.
- • Загрузите архив jre-8u144-windows-i586.tar.gz с официальной страницы Java SE 8 Archive Downloads.
- • Удалите папку jre в домашней папке. Распаковать архив в папку. Переименуйте разархивированную папку jre1.8.0_144 в jre.
- Запустите NCALayer.
Если предыдущая версия приложения была заменена на более новую, но при запуске возникает ошибка
, это может быть результатом неправильного обновления. Чтобы решить эту проблему, перейдите в домашнюю папку NCALayer.Затем удалите папку ncalayer-cache и файл ncalayer.der. Все сторонние модули можно удалить. Запустите NCALayer.
В связи с введением обязательного нотариального заверения приложений в Apple, macOS Catalina не позволяет запускать непроверенное приложение, даже если оно подписано зарегистрированным разработчиком. Это приводит к тому, что приложение не запускается.
На данный момент представлено временное решение проблемы, в виде явного разрешения на запуск NCALayer.
После получения сообщения о том, что NCALayer не может быть открыт, откройте «Системные настройки». Далее нажмите на значок "Защита и безопасность".
В блоке "Разрешить использование приложений, загруженных из: App Store и от подтвержденных разработчиков" должно отображаться следующее сообщение:
"Приложение" NCALayer " заблокировано, поскольку его автор не является установленным разработчиком."
Если все верно, то нажмите кнопку "Подтвердить вход", после чего запустится NCALayer.
Получение ключей ЭЦП
Проверка статуса запроса
Проверка ключа цифровой подписи
Отзыв ключа ЭЦП
NCALayer
Установите программное обеспечение NCALayer для запуска ключей цифровой подписи.
ПО NCALayer позволяет использовать ЭЦП НУЦ РК в веб-приложениях и работать с Java в браузерах. Возможности NCALayer могут быть расширены за счет установки дополнительных модулей, предоставленных сторонними разработчиками.
Для запуска NCALayer необходимо выполнить предварительную настройку компьютера. Конфигурации ПК должны соответствовать минимальным требованиям.
Руководство пользователя по установке NCALayer Открыть
Минимальные требования к ПК пользователя:
Браузер: Internet Explorer 10+, Firefox 4+, Opera 10+, Google Chrome 4+, Safari 5+;
Операционная система: Windows 7/8/10, Linux, OS X 10.
Внимание! Перед запуском браузера или портала, на котором будет выполняться использование ЭЦП, необходимо запустить приложение. Для удобства можно выбрать автозапуск приложения.
1414
support@goscorp.kz
У меня есть клиент веб-службы на основе Java, подключенный к веб-службе Java (реализованной на платформе Axis1).
Я получаю следующее исключение в моем файле журнала:
Было бы полезно, если бы вы показали нам XML, который пытаетесь проанализировать. (Думаю, подойдут только первые несколько строк.)
Спасибо, Стивен, я пытаюсь получить XML-запрос из платформы AXIS и вставить его сюда. Таким образом, общее понимание приведенной выше ошибки заключается в том, что XML имеет неправильный формат.
У меня возникла эта проблема, потому что я пытался преобразовать строковое имя файла xml, а не файл xml в строку! :Р
32 Ответа 32
Это часто происходит из-за пробела перед объявлением XML, но это может быть любой текст, например дефис или любой символ. Я говорю часто из-за пробелов, потому что люди считают, что пробелы всегда игнорируются, но здесь это не так.
Другая часто встречающаяся вещь – это спецификация UTF-8 (метка порядка следования байтов), которая разрешена до того, как объявление XML может быть обработано как пробел, если документ передается как поток символов для синтаксический анализатор XML, а не поток байтов.
То же самое может произойти, если файлы схемы (.xsd) используются для проверки XML-файла, а один из файлов схемы имеет спецификацию UTF-8.
Для всех, как я, кто изо всех сил пытается понять, что делать с Джоном Хамфрисом, - предложение w00te: замените Document document = documentBuilder.parse(new InputSource(new StringReader(xml))) на Document document = documentBuilder.parse(new InputSource (новый ByteArrayInputStream(xml.getBytes("UTF-8"))))
Собственно в дополнение к сообщению Юрия Зубарева
Когда вы передаете несуществующий xml-файл синтаксическому анализатору. Например, вы проходите
когда в вашей файловой системе существует только файл C:/temp/abc.xml
Все выдают одно и то же сообщение об ошибке.
Очень досадная ошибка, потому что следующая трассировка
ничего не говорит о факте «неверное имя файла» или «такой файл не существует». В моем случае у меня был абсолютно правильный xml-файл, и мне пришлось потратить 2 дня, чтобы определить реальную проблему.
Абсолютно согласен @Gewure :) Это был какой-то древний пост 2012 года, и я даже забыл об этом, но это правда
У меня была похожая проблема. Я часами пытался понять, в чем проблема, и даже не подумал о неправильном формате параметра.
Попробуйте добавить пробел между строкой encoding="UTF-8" в прологе и завершающим знаком ?> . В XML пролог обозначает этот элемент, разделенный скобками и вопросительным знаком, в начале документа (в то время как тег prolog в stackoverflow относится к языку программирования).
Добавлено: является ли тире перед прологом частью документа? Это было бы ошибкой, имея данные перед прологом, - .
+1. Я обнаружил, что некоторые синтаксические анализаторы XML пропускают это исключение, даже если пролог XML содержит пробелы, поэтому я думаю, что определенно стоит проверить, что ничего не предшествует
У меня была такая же проблема (и она была решена), когда я пытался разобрать XML-документ с помощью freemarker.
У меня не было пробелов перед заголовком XML-файла.
Проблема возникает когда и только когда кодировка файла и атрибут кодировки XML различаются (например, файл UTF-8 с атрибутом UTF-16 в заголовке).
Поэтому у меня было два пути решения проблемы:
- изменение кодировки самого файла
- изменение заголовка UTF-16 на UTF-8
Я предполагаю, что в целом любой случай, когда синтаксический анализатор получает противоречивую информацию о кодировке символов, может вызвать эту проблему.
Прошло много времени с момента этого ответа, но это сработало для меня в 2021 году. Я тестирую пользователя Pester в конвейере Jenkins и постоянно получаю сообщение об ошибке «контент в прологе». Я увидел, что файл результатов JUnit находится в UTF16, и по привычке я перешел в UTF8. Когда я перешел на UTF-16, это сработало. Invoke-Pester -Script resources/*.Tests.ps1 -PassThru | ConvertTo-JUnitReport -AsString | Out-File -Кодировка utf-16 .\results.xml
Это означает, что XML имеет неправильный формат или тело ответа вообще не является XML-документом.
Только что потратил 4 часа на поиск похожей проблемы в WSDL. Оказывается, WSDL использовал XSD, который импортирует другое пространство имен XSD. Этот импортированный XSD содержал следующее:
Обратите внимание на пустой элемент include! Это было корнем моих бед. Я предполагаю, что это вариация проблемы Егора с файлом, не найденной выше.
+1 за разочаровывающие отчеты об ошибках.
Возможно, мой ответ вам не поможет, но в целом поможет решить эту проблему.
Когда вы видите такое исключение, вы должны попытаться открыть свой XML-файл в любом шестнадцатеричном редакторе, и иногда вы можете увидеть дополнительные байты в начале файла, которые текстовый редактор не показывает.
Удалите их, и ваш xml будет проанализирован.
В моем случае удаление атрибута 'encoding="UTF-8"' полностью сработало.
Это похоже на проблему с кодировкой набора символов, возможно, потому, что ваш файл на самом деле не в UTF-8.
Иногда это код, а не XML
Следующий код
также приведет к этой ошибке,
потому что он пытается разобрать строковый литерал "file.xml" (а не содержимое файла file.xml) и терпит неудачу, потому что "file.xml" как строка не является правильно сформированным XML.
Исправлено: удалить StringReader():
Аналогичным образом, проблемы с грязным буфером могут оставить остаточный мусор перед фактическим XML. Если вы тщательно проверили свой XML и по-прежнему получаете эту ошибку, зарегистрируйте точное содержимое, передаваемое синтаксическому анализатору; иногда то, что на самом деле анализируется (пытается) оказывается удивительным.
Это решение указывает правильный путь, так как я забыл добавить путь к applicationContext.xml в коде и не проверял код, искал ошибку только в файле XML
Сначала очистите проект, затем перестройте проект. Я также столкнулся с той же проблемой. После этого все наладилось.
Чтобы устранить проблему со спецификацией в системах Unix/Linux:
Проверьте наличие нежелательного символа спецификации: hexdump -C myfile.xml | больше Нежелательный символ спецификации появится в начале файла как .
В качестве альтернативы сделайте файл myfile.xml . Файл с символом спецификации будет выглядеть следующим образом: myfile.xml: текст документа XML 1.0, текст Unicode UTF-8 (с спецификацией)
Исправить один файл с помощью: tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml
Повторите 1 или 2, чтобы убедиться, что файл очищен. Вероятно, также имеет смысл выполнить просмотр myfile.xml, чтобы проверить, что содержимое осталось.
Вот сценарий bash для очистки целой папки с XML-файлами:
Что я пробовал [не сработало]
В моем случае файл web.xml в моем приложении имел дополнительное пространство. Даже после того, как я удалил ; это не сработало!.
Я играл с logging.properties и web.xml в своем tomcat, но даже после того, как я откатился назад, ошибка сохраняется!.
Решение
Если быть точным, я пытался добавить
Если ничего не помогает, откройте файл в двоичном формате, чтобы убедиться, что в начале файла нет забавных символов [3 непечатаемых символа в начале файла, которые идентифицируют файл как utf-8]. Мы сделали это и нашли некоторые. поэтому мы преобразовали файл из utf-8 в ascii, и все заработало.
Для тех же проблем я удалил следующую строку
Он работает нормально. Не совсем уверен, почему этот UTF-8 вызывает проблемы. Чтобы держать меня в шоке, он отлично работает и для UTF-8.
Я использую Windows-7 32-разрядную версию и среду IDE Netbeans с Java *jdk1.6.0_13*. Не знаю, как это работает.
Как уже указал Майк Соколов, одной из возможных причин является наличие некоторых символов (например, пробела) перед тегом.
Если ваш входной XML читается как строка (в отличие от массива байтов), вы можете заменить свою входную строку приведенным ниже кодом, чтобы убедиться, что все «ненужные» символы перед тегом xml удалены. .
Вы должны быть уверены, что входной xml начинается с тега xml.
Я следовал приведенным здесь инструкциям и получил ту же ошибку.
Я пытался решить эту проблему несколькими способами (например, изменением кодировки, вводом XML-файла вместо его копирования и вставки и т. д.) в Блокноте и XML-блокноте, но ничего не помогло.
Проблема была решена, когда я отредактировал и сохранил XML-файл в Notepad++ (кодировка --> utf-8 без спецификации)
В моем случае я получил эту ошибку, потому что используемый API мог возвращать данные либо в формате XML, либо в формате JSON. Когда я тестировал его с помощью браузера, он по умолчанию использовал формат XML, но когда я вызывал тот же вызов из приложения Java, API возвращал ответ в формате JSON, что, естественно, вызывало ошибку синтаксического анализа.
Для всех, кто получает эту ошибку: ПРЕДУПРЕЖДЕНИЕ: Catalina.start с использованием conf/server.xml: содержимое не разрешено в прологе.
Не очень информативно... но на самом деле это означает, что в вашем файле conf/server.xml есть мусор.
Я видел точно такую же ошибку в других XML-файлах. Эта ошибка может быть вызвана внесением изменений в текстовом редакторе, который содержит мусор.
Чтобы проверить, есть ли в файле мусор, можно открыть его с помощью «HEX-редактора». Если вы видите какой-либо символ перед этой строкой
как будто это мусор
это ваша проблема. Решение состоит в том, чтобы использовать хороший HEX-редактор. Тот, который позволит вам сохранять файлы с различными типами кодировки..
Затем просто сохраните его как UTF-8. Некоторым системам, использующим XML-файлы, может потребоваться сохранить его как UTF NO BOM, что означает «NO Byte Order Mark»
Надеюсь, это кому-нибудь поможет!!
Для меня Build->Clean все исправила!
У меня была такая же проблема с некоторыми файлами XML, я решил прочитать файл с кодировкой ANSI (Windows-1252) и записать файл с кодировкой UTF-8 с помощью небольшого скрипта на Python. Я пытался использовать Notepad++, но безуспешно:
Есть еще одна мысль на будущее. Получение этой ошибки может быть в том случае, если кто-то просто нажимает клавишу удаления или какую-либо другую клавишу случайным образом, когда у них есть окно XML в качестве активного дисплея и они не обращают внимания. Это случалось со мной раньше с файлом struts.xml в моем веб-приложении. Неуклюжие локти.
У меня тоже самое
Ошибка чтения XML: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Сообщение: Ссылка не разрешена в прологе.
, когда мое приложение создавало XML-ответ для вызова RestFull Webservice. При создании строки формата XML я заменил < и > на < и >, после чего ошибка исчезла, и я получил правильный ответ. Не знаю, как это сработало, но сработало.
пример:
У меня была такая же проблема.
Сначала я загрузил XML-файл на локальный рабочий стол, и во время импорта файла на сервер портала я получил сообщение «Контент не разрешен в прологе». Даже визуально файл выглядел хорошо для меня, но каким-то образом он был поврежден.
Поэтому я повторно загрузил тот же файл и попробовал то же самое, и это сработало.
Это было веб-приложение на основе Spring, в котором bean-компонент JaxWsPortProxyFactoryBean был настроен для предоставления прокси-сервера для удаленного порта.
"END_POINT_BASE_URL" — это переменная среды, настроенная в "setenv.sh" экземпляра Tomcat, на котором размещено веб-приложение. Содержимое файла примерно такое:
Отсутствует ";" после того, как каждая строка вызвала искаженный URL-адрес и, следовательно, плохой ответ. То есть вместо «BusinessAppServices/OurService?wsdl» URL-адрес имел CR перед «/».«Мониторинг TCP/IP» был весьма удобен при устранении неполадок.
Где вы это прочитали. Не читайте больше такие ресурсы. Лучше найдите грамотную книгу по работе с сетями. NAT - это не веб-фильтр, это система подмены адресов. Если у провайдера NAT недостаточно реалов. И если это так, то по какой бы технологии вы ни отправляли пакет такому ip-провайдеру, он не будет знать, какой из клиентов его передаст. Ибо любой NAT основан на установленном мемориальном сеансе. Вот вы отправляете сумку в порт 443 из своего. Внутренний ip, про порт 12345 пока молчим. Провайдер меняет ваш IP на какой-то свой пул и меняет порт отправителя на 32000, и помнит, что любые пакеты приходящие на порт 32000 гуля (откуда был отправлен ip ) должен быть отправлен клиенту X на порт 12345. Если пакет придет снаружи на любой другой порт, для которого не было запомнено такое условие, пакет будет уничтожен, потому что будет непонятно, кому его отправить. Любому мелкому грамотному поставщик онлайн-фильтров блокируется первым. любые пакеты, приходящие от абонентов любые приходящие с IP, который не был выдан абоненту. Так что пакет подмены IP будет убит на первом же маршруте (а в некоторых случаях и прямо на скролле, где включен абонент). Кроме того, был убит тишина, без формирования ICMP. На межоперационных каналах таких блоков нет (и то не всегда). Понятие keep-alive существует только для протоколов с установленным соединением. Пакетов для ICMP нет. ICMP физически не способен остановить путь. За исключением случаев, когда этот ICMP является запросом на проверку связи и подпадает под общую схему NAT.
Inno Setup Compiler, как описать установку dop. По?
Программирование программного обеспечения • qt inno setup windowsinstaller • • simrah
Итак: [Выполнить] Имя файла:
PowerShell. Удаленная установка приложения с параметрами
Software Programming • powershell windowsinstaller • • калин
Решено обойти с помощью psexec.[cmdletbinding()] param ( [parameter(mandatory=$true)] $computer, [parameter(mandatory=$true)] $adminusername, [parameter(mandatory=$true)] $adminpassword ) C:\distr\PSTools\PsExec64.exe \\$computer -s -u $adminusername -p $adminpassword -accepteula -nobanner msiexec /i "\\srv\distr\MQServer\MSI\IBM WebSphere MQ.msi" / l*v "C:\MQ.log" /q TRANSFORMS="1033.mst" USEINI="\\srv\distr\MQServer\Response.ini"
В установочном файле "vs_enterprise` ничего не происходит!
Software Programming • установка Visual Studio 2015 windowsinstaller • • Андерсон
Как вы планируете запускать программу установки?
Программирование программного обеспечения • c Sharp com Windowsinstaller • • juvenalb
Как создать автоматическую метку на рабочем столе и поставить точку в Inno Setup?
Программирование программного обеспечения • icon inno setup windowsinstaller • • authera
Как переписать путь в ini-файл при настройке inno Setup?
Программирование программного обеспечения • файлы inno setup ini windowsinstaller • • Avante
Как сделать набор установщиков нужных программ (включая PostgreSQL) для установки в Windows?
Программирование программного обеспечения • postgresql windows inno setup windowsinstaller • • baileigh
Соберите установщики всех нужных вам программ. Изучите каждую из них на наличие параметров запуска для тихой/автоматической установки. Добавляем вызов всех установщиков с параметрами из нашего установщика. Если один из установщиков не поддерживает автоматическую установку, запустите ее и подождите, пока пользователь нажмет на кнопки. Профит!
Установщик, который запускает другой установщик
Software Programming • c sharp windowsinstaller • • carriann
WiX: управление записями в разделе реестра HKCU
Software Programming • windowsinstaller wix • • Amritpal
Визуальная студия. УстановитьShield. Регистрация COM-компонентов при установке приложения
Software Programming • visual studio com windowsinstaller • • baileigh
Install Shield Limited извлекает данные COM из dll, установленной в коллекции msi, и записывает данные об установке.По идее, все должно заработать самостоятельно, только добавить dll или ocx в список назначенных файлов. Если этот механизм для вашего COM-объекта по каким-то причинам не работает, его можно принудительно преобразовать в саморегистрацию, аналог regsvr32. Это можно сделать в характеристиках файла (правый клик по нему в списке Файлы), на COM " Сетевые настройки:
Что такое Torrent, Chrome, Opera
Программирование программного обеспечения • c sharp wpf windowsinstaller • • Кадин
Возможно ли запустить WPF-приложение без NET?
Программирование программного обеспечения • c sharp net wpf framework windowsinstaller • • tahishae
Пока это невозможно. Запуск приложений, написанных на NET и, следовательно, полностью зависящих от NET, невозможен без установки NET Framework. В настоящее время разрабатывается проект NET Native, который позволит скомпилировать NET-приложение в полностью независимый файл. Он основан на Visual Studio C++. Однако проект все еще находится на ранней стадии разработки и его первой целью является Магазин Windows, где производительность и потребление ресурсов наиболее критичны. В ближайшем будущем не планируется полная независимая бинарная компиляция приложения WPF. Вам всегда придется настраивать NET Framework, что, впрочем, не должно вызвать никаких проблем, потому что это системный компонент операционной системы, который обновляется с помощью Центра обновления Windows, достаточно только следить за обновлениями.< /p>
Как запустить wpf-приложение в виртуальной машине
Программирование • wpf framework windowsinstaller • • брили
Читайте также: