Java EE Weblogic мигрирует на WildFly 15

#java #rest #jersey #wildfly

#java #rest #джерси #wildfly

Вопрос:

Я пытаюсь перенести приложение Java EE 7 с сервера WebLogic (оно хорошо работает на нем) на WildFly. Но запросы Rest работают, поскольку это непонятно. Может быть, кто-то сталкивался? Я показываю код конфигурации и зависимости. Я был бы благодарен за любую помощь. В основном всплывают ошибки, связанные с типом содержимого: MessageBodyReader не найден для типа носителя = text / html; кодировка = UTF-8;

jboss-deployment-structure.xml

 jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
 <deployment>
      <exclude-subsystems>
          <subsystem name="jaxrs" />
         <subsystem name="resteasy" />
          <subsystem name="webservices" />
      </exclude-subsystems>
  </deployment>
</jboss-deployment-structure>
  

pom.xml

  <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.25</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.connectors</groupId>
            <artifactId>jersey-apache-connector</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-jaxb</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-jetty-servlet</artifactId>
            <version>2.25</version>
        </dependency>
  

Rest

 @GET
    @Produces({MediaType.APPLICATION_XML, AbstractFacade.TYPE_JSON_UTF})
    public List<Country> findAll() {
        return countryBeanLocal.findAll();
    }
  

Запрос

 countries = restClient.readEntity(
                    restClient.getWebTargetByPath("country")
                            .request(MediaType.APPLICATION_XML, RestClient.APPLICATION_JSON)
                            .get(), new GenericType<List<Country>>() {
                    });
  

Самое интересное, что после перезагрузки сервера он работает один раз, а второй — нет.

Комментарии:

1. Похоже, вы получаете какое-то исключение на стороне сервера, и сервер отправляет вам HTML-страницу с ошибкой. Вот почему в сообщении об ошибке отображается текст / html. Вы должны получить ответ в виде Response и проверить статус, и если это не код статуса успеха, проверьте тело. Держу пари, что это HTML-страница с ошибкой. Если да, выясните, в чем ошибка на стороне сервера.

2. @Paul Samsotha Спасибо за ответ, я пытаюсь исправить это на стороне сервера =) Интересно, что на сервере WebLogic таких проблем нет, и код не изменился.

3. Нужно ли использовать Jersey? В целом я обнаружил, что перенос между серверами приложений проще, если вы просто используете, в данном случае, стандартный JAX-RS. Использование альтернативной реализации JAX-RS — под прикрытием того, что Wildfly использует RestEasy, — может привести к конфликту. Используя стандарты, вам все равно. Действительно, WLS также не должен требовать зависимостей от Джерси.

4. @stdunbar Да, мне нужно использовать jersey, но я не могу отказаться от RestEasy. Спасибо за ответ. Может быть, вы все еще можете что-то сказать. Поскольку я, возможно, не понимаю, о чем вы говорите =)