Aplikasi jersey tidak berfungsi di WebLogic

Saya memiliki aplikasi yang berfungsi dengan baik ketika saya menerapkannya di server Tomcat tetapi tidak berfungsi jika diterapkan di weblogic.
Versi Tomcat adalah: 7.0.47
Versi weblogic adalah: 12.2.1.2.0

Ada titik akhir istirahat sederhana yang mengembalikan JSON:
http://localhost:8080/MyApplication/rest/configuration/test
Berfungsi dengan baik di Tomcat, di weblogic saya hanya mendapatkan string "Tidak Ditemukan".

Dalam file log, satu-satunya peringatan yang saya temukan adalah sebagai berikut:

<Warning> <JAXRSIntegration> <MyApplication> <[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <24ad6e0e-7bbc-4781-b294-f546069677ec-00000007> <1511013418859> <[severity-value: 16] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-2192510> <Cannot add Jersey servlet for application class org.glassfish.jersey.server.ResourceConfig because ApplicationPath annotation is not set on it.>
<Warning> <JAXRSIntegration> <MyApplication> <[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <24ad6e0e-7bbc-4781-b294-f546069677ec-00000007> <1511013418860> <[severity-value: 16] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-2192510> <Cannot add Jersey servlet for application class org.glassfish.jersey.server.ResourceConfig$WrappingResourceConfig because ApplicationPath annotation is not set on it.>
<Warning> <JAXRSIntegration> <MyApplication> <[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <24ad6e0e-7bbc-4781-b294-f546069677ec-00000007> <1511013418861> <[severity-value: 16] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-2192510> <Cannot add Jersey servlet for application class org.glassfish.jersey.server.ResourceConfig$RuntimeConfig because ApplicationPath annotation is not set on it.>

Titik Akhir:

@Path("/configuration")
@NoCache
public class ConfigurationResource {
    @GET
    @Path("/test")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getClientConfig() {
        Map<String, Object> map = new HashMap<>();
        map.put("test", "Test is running.");
        return Response.ok(map).build();
    }

    ...
}
public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(ConfigurationResource.class);
    }
}

dari web.xml

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.sample.rest.MyApplication</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

weblogic.xml:

<weblogic-web-app>
    <container-descriptor>
        <prefer-application-packages>
          <package-name>javax.ws.rs</package-name>
          <package-name>javax.persistence</package-name>
          <package-name>org.apache.commons</package-name>
          <package-name>org.slf4j</package-name>
          <package-name>org.apache.commons.logging</package-name>
          </prefer-application-packages>
    </container-descriptor>
</weblogic-web-app>

Saya sudah mencoba menambahkan anotasi namun tidak membuahkan hasil.
Adakah yang tahu apa yang bisa saya lakukan agar anotasi tersebut berfungsi?


person PaulEdison    schedule 18.11.2017    source sumber
comment
Tidak yakin apakah Anda menambahkan @ApplicationPath("/MyApplication") ke kelas MyApplication   -  person Optional    schedule 18.11.2017
comment
@Opsional: ya, itulah yang saya coba (karena saya pikir itulah yang hilang untuk weblogic) tetapi itu tidak berpengaruh pada peringatan dan fungsionalitas. yang menjengkelkan adalah tidak ada peringatan/kesalahan lain untuk memahami apa masalahnya.   -  person PaulEdison    schedule 20.11.2017


Jawaban (1)


Saya menemukan solusi untuk masalah itu setelah menghapus beberapa baris dari weblogic.xml yang berfungsi:

weblogic.xml:

<weblogic-web-app>enter code here
    <container-descriptor>
        <prefer-application-packages>

          <package-name>org.apache.commons</package-name>
          <package-name>org.slf4j</package-name>
          <package-name>org.apache.commons.logging</package-name>
          </prefer-application-packages>
    </container-descriptor>
</weblogic-web-app>

jadi saya menghapus:

          <package-name>javax.ws.rs</package-name>
          <package-name>javax.persistence</package-name>

ini adalah satu-satunya hal. Sayangnya, tidak ada petunjuk nyata apa masalah sebenarnya karena saya tidak menemukan entri kesalahan/peringatan di file log mana pun.

Tampaknya paket-paket ini tidak kompatibel dengan paket-paket yang disediakan oleh weblogic. Saya pikir itu juga harus diperiksa apakah dependensi yang sesuai dalam file pom berada dalam cakupan 'disediakan'.

person PaulEdison    schedule 26.11.2017