java - Weblogic 12.2.1.3 从 Moxy 到 Jackson

标签 java json jersey weblogic12c jackson2

我想将 JSON 解析器从 Moxy 更改为 Jackson,并且我遵循了 shared library approach ,但是没有任何结果,还是用了Moxy。

注意:共享库不是必需的!!!

共享库

我创建了一个具有以下依赖项和描述符的 Maven 项目。

pom.xml

 <properties>
    <jackson.annotations.release>2.8.6</jackson.annotations.release>
    <jersey.version>2.22.4</jersey.version>
 </properties>

 <dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-jaxb-annotations</artifactId>
        <version>${jackson.annotations.release}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson.annotations.release}</version>
    </dependency>

    <!-- Jersey dependencies -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey.version}</version>
    </dependency>
</dependency>

weblogic.xml

 <container-descriptor>
    <prefer-application-packages>
        <!-- apis -->
        <package-name>javax.ws.rs.*</package-name>

        <!-- guava -->
        <package-name>com.google.common.*</package-name>

        <!-- jersey providers -->
        <package-name>org.glassfish.jersey.*</package-name>
        <package-name>jersey.repackaged.*</package-name>

        <!-- hk2 -->
        <package-name>org.jvnet.hk2.*</package-name>
        <package-name>org.jvnet.hk2.tiger_types.*</package-name>
        <package-name>org.glassfish.hk2.*</package-name>
        <package-name>javassist.*</package-name>

        <!-- media providers -->
        <!--<package-name>org.eclipse.persistence.jaxb.rs.*</package-name>-->
        <package-name>com.fasterxml.jackson.*</package-name>

        <!-- wls -->
        <package-name>weblogic.jaxrs.api.client.*</package-name>
        <package-name>weblogic.jaxrs.internal.api.client.*</package-name>
        <package-name>weblogic.jaxrs.dispatch.*</package-name>
        <package-name>weblogic.jaxrs.monitoring.util.*</package-name>
    </prefer-application-packages>
</container-descriptor>

MANIFEST.MF

Manifest-Version: 1.0
Implementation-Title: Jackson Weblogic
Implementation-Version: 1.0
Specification-Title: Jackson Weblogic
Extension-Name: jackson-weblogic
Specification-Version: 1.0

网络应用程序

我添加了 web.xmlweblogic.xml

web.xml

<servlet>
    <servlet-name>com.dummy.MyApplication</servlet-name>
        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider</param-value>
        </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>com.dummy.MyApplication</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <library-ref>
        <library-name>jstl</library-name>
        <specification-version>1.2</specification-version>
        <implementation-version>1.2</implementation-version>
        <exact-match>false</exact-match>
    </library-ref>
    <library-ref>
        <library-name>jackson-weblogic</library-name>
        <specification-version>1.0</specification-version>
        <exact-match>false</exact-match>
    </library-ref>
</weblogic-web-app>

然后我在weblogic.xml中引用了共享库,但仍然使用Moxy。我是不是做错了什么?

更新:我已添加 Web 应用程序的 web.xmlweblogic.xml

解决方案

我已经检查了文件夹 oracle_common\modules 并且找到了所需的所有 Jackson 依赖项。因此,我更愿意配置 Jersey 来禁用 MOXy,如下所示:

import javax.ws.rs.core.Application;
public class MyApplication extends Application
{
    @Override
    public Map<String, Object> getProperties()
    {
        Map<String, Object> proprties = new HashMap<>();
        proprties.put("jersey.config.server.disableMoxyJson", true);

        return proprties;
    }
}

注意:

  • 方法 getProperties()javax.ws.rs 2.0 一起提供;
  • Jackson 不需要特定的共享库,只需 jSTL jax-rs 2.0
  • web.xml 中不需要任何信息;
  • 据@abbas报道,JAX-RS 2.0默认使用Weblogic 12.2.1.3.0,在我的例子中,我对javax.ws.rs:jsr311-api有传递依赖,所以该方法getProperties() 未调用。

最终的 weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">

    <context-root>/web-app</context-root>
    <container-descriptor>
        <prefer-application-packages>
            <package-name>org.apache.commons.net.*</package-name>
        </prefer-application-packages>
    </container-descriptor>

    <library-ref>
        <library-name>jstl</library-name>
        <specification-version>1.2</specification-version>
        <implementation-version>1.2</implementation-version>
        <exact-match>false</exact-match>
    </library-ref>
</weblogic-web-app>

最佳答案

在 pom.xml 中提及 JAX-RS 2.0 作为依赖项

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0.1</version>
    <scope>provided</scope>
</dependency>

在 WebLogic 12.2.1 中,您不需要将其部署为共享库。

关于java - Weblogic 12.2.1.3 从 Moxy 到 Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813309/

相关文章:

java - 继承中的静态 block vs 初始​​化 block vs 构造函数

java - 运行时从Jar文件加载资源

json - Ionic 2 Angular 2 JSON - 无法读取未定义的属性 'x',但 x.field 有效

jquery ui 自动完成复杂搜索以及前后结果

web-services - com.sun.jersey.api.container.ContainerException : The ResourceConfig instance does not contain any root resource classes

java - JPA:左连接不适用于 where 子句中的 "is null"

java - 使用 Jetty 进行 HTTP/2 优先级和依赖性测试

javascript - 条件语句为空或非空

java - 包括使用 JAX-RS+Jersey 进行 JSON 到对象映射的 Morphia

xml - 400 对剩余应用程序/xml 的错误请求