Почему javax.json из Glassfish необходим в качестве зависимости при использовании Yasson с JSON-B?

Чтобы использовать Java API для привязки JSON (JSON-B), я счел необходимым включить в мой Maven POM следующие три зависимости:

    <!-- https://mvnrepository.com/artifact/jakarta.json.bind/jakarta.json.bind-api -->
    <dependency>
        <groupId>jakarta.json.bind</groupId>
        <artifactId>jakarta.json.bind-api</artifactId>
        <version>1.0.1</version>

    </dependency>

    <!-- https://mvnrepository.com/artifact/org.eclipse/yasson -->
    <dependency>
        <groupId>org.eclipse</groupId>
        <artifactId>yasson</artifactId>
        <version>1.0.3</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.1.4</version>
    </dependency>

Первые два имеют смысл для меня.

➥ Но что именно делает третья зависимость, javax.json из Glassfish, принести на вечеринку? Почему для работы моего приложения требуется?

Если опущено, при запуске Jsonb jsonb = JsonbBuilder.create();Я получаю эту ошибку:

javax.json.JsonException: поставщик org.glassfish.json.JsonProviderImpl не найден

Я запутался, потому что думал, что Yasson - это моя реализация обработки JSON.

0 ответов

На самом деле ваш код должен зависеть только от api jakarta.json.bind-api, чтобы случайно не использовать детали реализации из yasson, например, внутренний org.eclipse.yasson.internal.ReflectionUtils. Для этого следует добавить<scope>runtime</scope> на ваш yassonзависимость. Только для его запуска вам нужна реализация, и вы выбрали эталонную реализацию.yasson.

Но JSON-B - это просто слой поверх JSON-P: он выполняет часть привязки, в то время как он делегирует всю необработанную обработку JSON JSON-P. Вы можете смешивать и сопоставлять любую реализацию JSON-B с любой реализацией JSON-P.

Как yassonдолжен уметь работать с любой реализацией JSON-P, он не может иметь жесткой зависимости, например, от Glassfish JSON-P; вы должны указать это сами (также сruntimeсфера). В сообщении об ошибке, которое вы видите, упоминается Glassfish, поскольку это резервная реализация, которую ищет JSON-P.

Другие вопросы по тегам