Используйте jdk.internal.net.http - PullRequest
       61

Используйте jdk.internal.net.http

0 голосов
/ 01 января 2019

Я хотел бы использовать ResponseSubscribers.ByteArraySubscriber в jdk.internal.net.http.Я использую openjdk11.

Я попробовал 2 вещи:

1 / я добавил в модуль экспорта плагинов для компилятора maven

<compilerArgs>
    <arg>--add-exports</arg><arg>java.net.http/jdk.internal.net.http=fr.app</arg>
</compilerArgs>

-> он компилируется!

2 / Я создал module-info.java

module fr.app {
    requires java.net.http;

    requires com.fasterxml.jackson.core;
    requires com.fasterxml.jackson.databind;
    requires com.fasterxml.jackson.datatype.jsr310;

    exports fr.app;
    exports fr.app.parser;
}

Произошла ошибка при запуске теста junit, использующего класс импорта jdk.internal.net.http

fr.app.AppException: java.io.IOException: класс fr.app.MyClass $ BodySubscribeers (в неназванном модуле @ 0x6537cf78) не может получить доступ к классу jdk.internal.net.http.ResponseSubscribeers $ ByteArraySubscriber (в модуле java.net.http), так как модуль java.net.http не экспортирует jdk.internal.net.http в неназванный модуль @ 0x6537cf78

Я понимаю, что BodySubscribers необходимо экспортировать только в названный модуль.Но мой модуль называется fr.app верно?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы не должны напрямую использовать какой-либо класс из пакета jdk.internal.*.Вы пытались использовать общедоступный API HttpResponse.BodySubscribers.ofByteArray() вместо этого?

0 голосов
/ 02 января 2019

Но мой модуль называется fr.app, верно?

Не совсем, пока вы создали module-info.java в своем проекте, во время выполнения вашего приложения ваш реальный кодпохоже, в конечном итоге найдено на пути к классам.

Следовательно, ваш MyClass находится в неназванном модуле , и ошибка выглядит следующим образом

class fr.app.MyClass $ BodySubscribeers (в неназванном модуле .....


С другой стороны, упомянутый вами класс, кажется, упакован внутренним к модулю java.net.http, и на него не следует полагаться из вашего кода. Вы должны реализовать своего собственного подписчика, даже если вы хотите использовать функциональность, аналогичную той, которую вы просматриваете. Поскольку модуль не будет экспортировать егов любом случае для общего пользования.

...