Развертывание веб-службы Jersey 1.11 RESTful в JBoss 6.1 Final (RestEasy уже не развернут) - PullRequest
1 голос
/ 24 января 2012

Заранее извините за стену текста, но я хотел быть внимательным, чтобы не тратить ваше время, добрые StackOverflow-ers.: -)

Я успешно развернул и протестировал веб-сервис RESTful в Tomcat 7 в качестве файла военных действий, поскольку JBoss использует Tomcat в качестве компонента, я (по ошибке) подумал, что развертывание будет таким же простым, как удалениефайл war в мой каталог JBoss 6.1 server / default / deploy, нет!Сначала я получил сообщение о том, что разрешен только один класс приложений JAX-RS, это было легко исправить, удалив resteasy.deployer из deployers / dir в Jboss (все, стандартные и стандартные серверы, если быть точным).

Теперь суть в том, что при запуске Jboss я получаю следующие сообщения:



    10:38:07,431 INFO  [PackagesResourceConfig] Scanning for root resource and provider classes in the packages:
    net.ussouth.incomm.SPIL.resource
    10:38:07,486 INFO  [WebApplicationImpl] Initiating Jersey application, version 'Jersey: 1.11 12/09/2011 10:27 AM'
    10:38:07,718 SEVERE [RootResourceUriRules] The ResourceConfig instance does not contain any root resource classes.
    10:38:07,719 ERROR [[/SPIL]] StandardWrapper.Throwable: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
        at com.sun.jersey.server.impl.application.RootResourceUriRules.(RootResourceUriRules.java:99) [:1.11]
        at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1298) [:1.11]
        at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:169) [:1.11]
        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:775) [:1.11]
        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:771) [:1.11]

Вот класс Resource, который находится в каталоге WEB-INF / classes:



    package net.ussouth.incomm.SPIL.resource;

    import javax.ws.rs.Path;
    import javax.ws.rs.POST;
    import javax.ws.rs.Consumes;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.Produces;
    import javax.ws.rs.FormParam;

    import org.apache.log4j.Logger;

    @Path("/message")
    public class MessageResource {
      private static Logger log = Logger.getLogger(MessageResource.class);


      @POST
      @Path("/Search")
      @Produces(MediaType.APPLICATION_XML)
      @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
      public String search(@FormParam("message") String _msgToProvider, @FormParam("provider") String _provData) {
        log.info("MesageResource.search method called");
        String outVal = null;

        try{
          ProviderHandler hnd = new ProviderHandler();
          outVal = hnd.getOffers(_msgToProvider);

        } catch(JAXBException ex) {
          ...
        } catch (SearchException ex) {
          ...
        }

        return outVal;
      }     
    }

Вот файл web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  id="WebApp_ID" 
  version="2.5">

  <display-name>Spil</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>SpilMessageService</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>net.ussouth.incomm.SPIL.resource</param-value>
    </init-param>

    <init-param>
      <param-name>log4j-properties-location</param-name>
      <param-value>classes/log4j.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpilMessageService</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

И наконец, для хорошего примера вот файл jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>
    <context-root>SPIL</context-root>
</jboss-web>

Спасибо за любую помощь.Я потратил 1,5 дня, исследуя и ударяя головой о стену.

Ответы [ 2 ]

4 голосов
/ 18 января 2013

Все, что вам нужно, это использовать переносимый подход к развертыванию JAX-RS, как описано здесь .Вместо использования сканирования пакетов принудительно выполняйте ручное сканирование, используя реализацию javax.ws.rs.core.Application

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;

public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        // register resources
        classes.add(MessageResource.class);
        return classes;
    }
}

Затем обновите файл web.xml, чтобы использовать его вместо этого.Не забудьте отключить повторное сканирование, как показано ниже.

<?xml version="1.0" encoding="UTF-8"?>
    <web-app
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID"
        version="2.5">

    <display-name>Spil</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>SpilMessageService</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>net.ussouth.incomm.SPIL.resource.MyApplication</param-value>
        </init-param>

        <init-param>
            <param-name>log4j-properties-location</param-name>
            <param-value>classes/log4j.xml</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>

    <servlet-mapping>
        <servlet-name>SpilMessageService</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>
0 голосов
/ 12 февраля 2012

Orf

Я встречался с вами с той же проблемой (Джерси 1.11 + кот 7). Но после того, как я перешел на tomcat 6, свитер работает!

Я не знаю почему, но я предлагаю вам измениться и попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...