簡體   English   中英

是否可以在WebLogic12c上使用Resteasy(或不使用Jersey-JAXRS實現)?

[英]Resteasy (or not Jersey - JAXRS implementation) on WebLogic12c, is possible?

我有一個帶有寧靜的Web服務API的Web應用程序。 該應用程序現已開發,並且可以在Glassfish服務器(3.1.x)上完美運行。

作為jax-rs的實現,Webapp使用Rest-easy,因為存在的功能在Jersey尚不存在。

現在,有必要在WebLogic 12c中(特別是在weblogic 12.1.2中)部署Web應用程序。 但這似乎是不可能的。 Weblogic使用Jersey提供靜態服務,如果要使用其他實現jax-rs,則會產生沖突。 然后的問題是...是否可以使用與JAX-RS Jersey不同的實現。 (在我的情況下為RestEasy)。

盡管已將web.xml存檔配置為使用RestEasy Servlet,但仍顯示錯誤,例如是否使用Jersey( <BEA-101216> <Servlet: "Jersey" failed to preload on startup in Web application: "pruebaRestWL-1.0-SNAPSHOT") and ( <Error> com.sun.jersey.spi.inject.Errors> )。

錯誤是:

    <17/12/2013 10:52:07 AM CST> <Warning> <weblogic.jaxrs.server.portable.servlet.ServletContainer> <BEA-000000> <Failed to create monitoring factory: oracle.j2ee.ws.server.jaxrs.dms.JaxRsDMSMonitoringEventReceiverFactory:
     oracle.j2ee.ws.server.jaxrs.dms.JaxRsDMSMonitoringEventReceiverFactory> 
<17/12/2013 10:52:08 AM CST> <Error> <com.sun.jersey.spi.inject.Errors> <BEA-000000> 
<The following errors and warnings have been detected with resource and/or provider classes: SEVERE: 
    Missing dependency for constructor public org.jboss.resteasy.plugins.providers.DocumentProvider(org.jboss.resteasy.spi.ResteasyConfiguration) at parameter index 0   
    SEVERE: Missing dependency for constructor public org.jboss.resteasy.core.AsynchronousDispatcher(org.jboss.resteasy.spi.ResteasyProviderFactory) at parameter index 0> 
    <17/12/2013 10:52:08 AM CST> <Error> <HTTP> <BEA-101216> <Servlet: "Jersey" failed to preload on startup in Web application: "pruebaRestWL-1.0-SNAPSHOT". 
    com.sun.jersey.spi.inject.Errors$ErrorMessagesException   at 
    com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) at 
    com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)   at 
    com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)   at 
    com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770) at 
    com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765) Truncated. see log file for complete stacktrace

web.xml (這是Resteasy並在GF中工作所需的配置)

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <!-- :::::::::::::::::::::::::::::::::::::: -->
    <!-- Configuración para implementación rest -->
    <!-- :::::::::::::::::::::::::::::::::::::: -->
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <listener>
        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
    </listener>
    <servlet>
        <servlet-name>Resteasy</servlet-name> <!-- Servlet for use RestEasy -->
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/services</param-value>
    </context-param>
</web-app>

我嘗試的一種方法是在WebLogic上禁用Jersey。 我嘗試刪除ORACLE_HOME / oracle_common / modules中用於weblogic的球衣庫。

  • jersey-client-1.17.1
  • 球衣核心-1.17.1
  • jersey-json-1.17.1
  • jersey-multipart-1.17.1
  • jersey-server-1.17.1
  • 球衣-servlet-1.17.1

但是我有這個錯誤:weblogic.application.ModuleException:java.lang.ArrayStoreException:sun.reflect.annotation.TypeNotPresentExceptionProxy

<17/12/2013 10:07:15 AM CST> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID "1387296431330" for task "0". Error is: "weblogic.application.ModuleException: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy"
weblogic.application.ModuleException: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
  at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
  at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
  at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213)
  at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208)
  at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
  Truncated. see log file for complete stacktrace

編輯:僅與一個Restful服務共享一個小Maven項目,並配置為使用RestEasy。 該項目在GF工作。

鏈接下載用於測試行為的Maven項目

可以用de URI進行測試。 得到。

 http://domain:8080/pruebaRestWL/services/test

 (in glassfish)
    Here is working solution on WebLogic 12.2.1 and WebLogic 10.3.6

    Changes in pom.xml
         <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>2.2.1.GA</version>
         </dependency>
         <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>2.2.1.GA</version>
         </dependency>

    Changes in web.xml
        <!-- A comma delimited list of fully qualified JAX-RS resource class names you want to register -->
        <!-- And don't use resteasy.scan=true -->
        <context-param>
            <param-name>resteasy.resources</param-name>
            <param-value>com.***.RestServiceClass</param-value>
        </context-param>

        <!-- This is needed if the url-pattern for the Resteasy servlet-mapping is not /* -->
        <context-param>
            <param-name>resteasy.servlet.mapping.prefix</param-name>
            <param-value>/rest</param-value>
        </context-param>

        <listener>
            <listener-class>
                org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
            </listener-class>
        </listener>

        <servlet>
            <servlet-name>resteasy-servlet</servlet-name>
            <servlet-class>
                org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
            </servlet-class>
        </servlet>

        <servlet-mapping>
            <servlet-name>resteasy-servlet</servlet-name>
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>

@Stateless
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class RestServiceClass
{
   @POST
   @Path("/doJob1")
   @GZIP
   public String doJob1()
   {
      return "Ok";
   }
...

可以部署RESTeasy並加以利用。 確保正確設置weblogic.xml以便隔離類路徑 不需要,實際上您不應該禁用Jersey模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM