Используйте предоставленные jax-rs 2.0 и Jersey 2.1x в Weblogi c 12 c (12.2.1.3) - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно реализовать вызов службы отдыха в моем WEB-приложении. Согласно Oracle, Weblogi c поддерживается и не требует регистрации (развертывания) jax-rs, поэтому я хотел бы использовать эти серверные библиотеки. Я сделал простой класс, вызвав службу (get). Я настроил зависимости в проекте и развернул его на Weblogi c. Однако при развертывании появляется следующая ошибка: java .lang.ClassCastException: невозможно преобразовать org.glassfi sh .jersey.ext.cdi1x.internal.CdiComponentProvider в org.glassfi sh .jersey.server .spi.ComponentProvider

Примечание. Он работал с использованием приведенной ниже ссылки (развертывание jar-файла на сервере), но я хочу использовать собственные библиотеки на Weblogi c. Может кто-нибудь мне помочь?

https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297

Code example (Java)
        String host = "https://swapi.dev/api/people/2/";
        Client client = ClientBuilder.newBuilder().build();
        WebTarget webTarget = client.target(host);
        Builder builder = webTarget.request(MediaType.APPLICATION_JSON);
        String result =  builder.get(String.class);


pom.xml

    <properties>
        <primefaces.version>3.5.RC1</primefaces.version>
        <jersey.version>2.21.1</jersey.version>
        <jaxrs.version>2.0</jaxrs.version>      
    </properties>
    <!-- JAX-RS -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>${jaxrs.version}</version>
        <scope>provided</scope>
    </dependency>
    <!-- Jersey 2.21.1 -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.4.1</version>
        <scope>provided</scope>
    </dependency>   
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.6</version>
    </dependency>



 weblogic.xml

    <wls:weblogic-version>12.2.1.3</wls:weblogic-version>
    
    <wls:context-root>RecebimentoMercadoriaWEB</wls:context-root>

    <wls:library-ref>
        <wls:library-name>jsf</wls:library-name>
    </wls:library-ref>

    <wls:container-descriptor>
        <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
    </wls:container-descriptor>
    
    <wls:session-descriptor>
        <wls:cookie-name>CookieRecebimentoMercadoria</wls:cookie-name>
    </wls:session-descriptor>
    
    <wls:container-descriptor>
        <wls:prefer-application-packages>
            <wls:package-name>javax.faces.*</wls:package-name>
            <wls:package-name>com.sun.faces.*</wls:package-name>
            <wls:package-name>com.sun.facelets.*</wls:package-name>
            <wls:package-name>com.bea.faces.*</wls:package-name>
        </wls:prefer-application-packages>

        <wls:prefer-application-resources>
            <wls:resource-name>javax.faces.*</wls:resource-name>
            <wls:resource-name>com.sun.faces.*</wls:resource-name>
            <wls:resource-name>com.sun.facelets.*</wls:resource-name>
            <wls:resource-name>com.bea.faces.*</wls:resource-name>
            <wls:resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</wls:resource-name>
            <wls:resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</wls:resource-name>
        </wls:prefer-application-resources>
    </wls:container-descriptor>

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Библиотеки действительно конфликтуют. Я удалил эти зависимости из pom. xml, и это сработало. Спасибо за подсказку.

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

   <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.4.1</version>
        <scope>provided</scope>
    </dependency>
0 голосов
/ 05 августа 2020

В Weblogi c 12.2.1.3 вам не нужно выполнять процедуру, описанную по указанной вами ссылке, я имею в виду ссылку ниже.

https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297

Это потому, что эта ссылка принадлежит Oracle Weblogi c 12.1.3 , и есть несколько различий между Weblogi c 12.1.3.0 и Weblogi c 12.2.1.3.

Кроме того, этот документ для Oracle Weblogi c 12.2.1.3 состояний.

Примечание:

Jersey 2.x (JAX-RS 2.0 RI) поддержка предоставляется по умолчанию в этом выпуске WebLogi c Server. Регистрация в качестве разделяемой библиотеки не требуется больше не требуется .

Это означает, что когда дело доходит до Weblogi c 12.2.1.3 Библиотеки Jersey уже есть и готов к использованию. Таким образом, ваше приложение должно иметь возможность их использовать.

Однако я думаю, что у серверных библиотек возникают проблемы с библиотеками, которые вы используете в своем файле pom. xml.

Более того Oracle Weblogi c 12.2.1.3 предоставляет jersey 2.22.4

Я также использовал wls-cat на одном из моих серверов, чтобы узнать, какая библиотека загружает класс org .glassfi sh .jersey.ext.cdi1x.internal.CdiComponentProvider , и я нашел библиотеку в $ ORACLE_HOME / oracle_common / modules / org.glassfi sh .jersey.ext.cdi.jersey- cdi1x.jar , что означает, что он загружен Weblogi c, как указано в документации выше.

Кроме того, после запуска wls-cat я вижу следующее:

org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider implements org.glassfish.jersey.server.spi.ComponentProvider

Таким образом, приведение типов не должно быть проблемой, что означает наличие проблемы с загрузкой класса, которая, скорее всего, вызвана библиотеками, включенными в ваше приложение.

Вы можете увидеть результаты wls-cat выполнено на моем сервере на картинке ниже

enter image description here

You can use wls-cat to see which file (a JAR library) is loading the conflicting class. In below post you will find information about how to use wls-cat to analyse class loading problems.

https://blog.sysco.no/class/loader/AnalysingClassLoadingConflicts/

...