Вернуть отложенный тип из библиотеки Bluetooth Polidea - Kotlin Coroutines

Я хотел бы добавить один ответ на этот пост. Сегодня я столкнулся с подобной проблемой и нашел, что основной причиной является еще одна зависимая бана, которая была внутри, используя более старую версию Jersey / JAX-RS.

Мой POM до исправления был:

<jersey.version>2.17</jersey.version>
...
<dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>com.ci.wrapper</groupId>
        <artifactId>client-wrapper</artifactId>
        <version>${clients-wrapper.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.api.commons</groupId>
        <artifactId>transferobjects</artifactId>
        <version>3.0.2</version>
    </dependency>

Проблема заключалась в «com.ci.wrapper» и «com.api.commons». Они включили 2 разных JAR's BraveJersey и org.apache.cxf.cxf-rt-frontend-jaxrs (2.5.1), которые использовали версии Джерси и JAX-RS 1.X.

После исключения вложенные jar и добавление новой версии BraveJersey2 / org.apache.cxf.cxf-rt-frontend-jaxrs (3.1.5), она была решена.

<dependency>
    <groupId>com.api.commons</groupId>
    <artifactId>transferobjects</artifactId>
    <version>3.0.2</version>
    <exclusions>
        <exclusion>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <groupId>org.apache.cxf</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
    <version>3.1.5</version>
</dependency>

<dependency>
    <groupId>com.ci.wrapper</groupId>
    <artifactId>client-wrapper</artifactId>
    <version>${clients-wrapper.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <artifactId>brave-jersey</artifactId>
            <groupId>com.github.kristofa</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>com.github.kristofa</groupId>
    <artifactId>brave-jersey2</artifactId>
    <version>2.4.2</version>
</dependency>

Если вы столкнулись с аналогичным вопрос, пожалуйста, проверьте, может ли проект или фляга использовать несовместимую версию Jersey / Jax-RS.

0
задан Nicola Gallazzi 16 January 2019 в 08:26
поделиться

1 ответ

Вам необходимо заключить вызов метода subscribe в блок

suspendCancellableCoroutine< RxBleDevice>{ cont ->
  //your code here
}

. В реализации обратного вызова subscribe используйте cont.resume() для возобновления сопрограммы с результатом и cont.resumeWithException для возобновления ее с ошибкой.

Вы также можете связать отмену между сопрограммой и сканированием. Подробнее см. cont.invokeOnCancellation { }.

API, который вы вызываете, выглядит как Rx, может быть, один из этих модулей поможет https://github.com/Kotlin/kotlinx.coroutines/blob/master/reactive/README.md

0
ответ дан Eugene Petrenko 16 January 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: