org.xml.sax.SAXParseExceptionpublicId: http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd - PullRequest
1 голос
/ 24 июня 2019

Ошибка при выполнении неожиданно:

org.xml.sax.SAXParseExceptionpublicId: 
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd; lineNumber: 
1; columnNumber: 1; Deployment descriptor file META-INF/persistence.xml 
in archive [classes].  Premature end of file.



curl -v http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd
*   Trying 2600:1402:f000:392::f6b...
* TCP_NODELAY set
* Connected to xmlns.jcp.org (2600:1402:f000:392::f6b) port 80 (#0)
> GET /xml/ns/persistence/persistence_2_1.xsd HTTP/1.1
> Host: xmlns.jcp.org
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: AkamaiGHost
< Content-Length: 0
< Location: https://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd
< Cache-Control: max-age=0
< Expires: Sun, 23 Jun 2019 23:21:20 GMT
< Date: Sun, 23 Jun 2019 23:21:20 GMT
< Connection: keep-alive
<
 * Connection #0 to host xmlns.jcp.org left intact

До сегодняшнего дня это не было проблемой, и кажется, что этот файл больше недоступен, но это стандартная ссылка для файлов JPA persistence xml:

HTTP/1.1 301 Moved Permanently

У кого-нибудь вдруг возникла эта проблема? Я не могу отследить это до каких-либо изменений, и я испытываю это локально и на сервере.

Ответы [ 5 ]

1 голос
/ 24 июня 2019

Корень проблемы, похоже, кроется в Oracle и заботе о безопасности, что побудило недавно перейти на протокол HTTPS.
XMLMetaDataParser в org.apache.openjpa.lib.meta использует SaxParser для чтения XML-файлов в методе parseNewResource, который выдает преждевременную ошибку конца файла. Текст ошибки не особенно информативен. Однако обращение к редактору XML Copy [http://xml -copy-editor.sourceforge.net] для проверки схемы выявляет фактически возникшую ошибку:
Неустранимая ошибка в строке 0, столбце 0: неподдерживаемый протокол в URL. Эта информация, в конечном счете, привела меня к этому посту с участием OpenEdge от 6.11.2008: [https://knowledgebase.progress.com/articles/Article/Unsupported-protocol-in-URL-reading-XML-from-a-URI].
В разделе «Причина» говорится: «URL-адрес, который использовался ранее для HTTP, теперь перенаправляется на HTTPS».
А в разделе «Разрешение:« Это ограничение внутри анализатора Apache Xerces, которое использует клиент OpenEdge для внутреннего использования. У него ограниченная поддержка URL-адресов, поэтому анализатор не может обрабатывать перенаправление URL-адресов или HTTPS-URL, аналогичные веб-браузеру ».
Таким образом, значительная часть текста xml, обозначенного в сообщении об ошибке как «systemId», представляет собой оператор протокола http, который теперь перенаправляется на https на веб-сайте Oracle, вызывая ошибку синтаксического анализа. Это объясняет, почему код, который работал отлично, однажды внезапно перестал работать на следующее утро. То, сколько реализаций ORM имеют это ограничение, должно быть известно довольно быстро.

Проблема решена. Я заменил
https://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd
с
https://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd
и программа теперь собирает нормально.

0 голосов
/ 25 июня 2019

На данный момент исправлена ​​ошибка, связанная с изменением файла persistence.xml в соответствии с расположением схемы:

http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd

Полная первая строка файла persistence.xml выглядит следующим образом:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd" version="2.1">

Подробнее и причина: Основная причина этой проблемы заключается в множественных перенаправлениях с http на https и наоборот. Я использовал curl, чтобы добраться до последнего URL:

curl -v  http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd

HTTP / 1.1 301 перемещено навсегда Расположение: https://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd

curl -v https://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd

HTTP / 1.1 301 перемещено навсегда http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd

Используйте это во всех ваших файлах persistence.xml. Это сработало для меня.

Примечание: Oracle может изменить этот окончательный URL снова. Если они вообще меняют URL, и ваша сборка завершается неудачно, вы знаете, как добраться до окончательного URL с помощью команды curl.

Спасибо

0 голосов
/ 25 июня 2019

Я решил, изменив http на https, поэтому перенаправление (которое является проблемой) не произойдет.

<? xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.1"
xmlns = "https://xmlns.jcp.org/xml/ns/persistence" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation = "https://xmlns.jcp.org/xml/ns/persistence https://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

Примечание: у меня была эта проблема с java 7 и glassfish 3, с java 8 и glassfish 4 это работает.

0 голосов
/ 25 июня 2019
Быстрое исправление

- сделать так, чтобы URL http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd просто возвращал 404 и не перенаправлял на https.Как добавление 127.0.0.1 xmlns.jcp.org в /etc/hosts.

0 голосов
/ 24 июня 2019

У меня та же проблема с сегодняшнего дня.Мое быстрое решение состояло в том, чтобы изменить версию persistance.xml с 2.1 на 1.0, у меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...