【问题标题】:How to test jackson-jaxrs-json-provider (Arquillian + Wildfly)如何测试 jackson-jaxrs-json-provider (Arquillian + Wildfly)
【发布时间】:2016-05-19 05:08:18
【问题描述】:

我正在使用 Jackson JSON 提供程序来序列化/反序列化 JAXRS 请求。

为了设置它,我在WEB-INF 文件夹下有一个jboss-deployment-structure.xml 文件:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider"/>
            <module name="org.jboss.resteasy.resteasy-jettison-provider"/>
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

所以,为了得到它,我已经构建了一个测试:

@RunWith(Arquillian.class)
public class FollowUpActivityDTOSerializationTest
{

    @Inject private ObjectMapper mapper;

    @Deployment
    public static WebArchive createDeployment()
    {   
        System.getProperties().remove("javax.xml.parsers.SAXParserFactory");
        EmbeddedGradleImporter importer = ShrinkWrap.create(EmbeddedGradleImporter.class);
        WebArchive war = importer.forThisProjectDirectory().importBuildOutput().as(WebArchive.class);

        war.addClass(ArquillianAlternative.class);
        war.addClass(MockFactory.class);
        war.addAsWebInfResource(
            new StringAsset("<alternatives><stereotype>com.living.mock.ArquillianAlternative</stereotype></alternatives>"),
            "beans.xml"
        );

        JavaArchive[] libs = Maven.resolver().resolve("org.mockito:mockito-core:2.0.31-beta").withTransitivity().as(JavaArchive.class);
        war.addAsLibraries(libs);

        return war;
    }

    @Test
    public void emptyJSON()
    {   
        String emptyJSON = "{\"id\": \"id\"}";

        try {
            FollowUpActivityDTO dto = this.mapper.readValue(emptyJSON, FollowUpActivityDTO.class);
            assertNotNull(dto);
            assertEquals(dto.getId(), "id");
        } catch (IOException e) {
            fail(e.getMessage());
        }
    }

}

问题是 Weld 告诉我:

带有限定符 @Default 的类型 ObjectMapper 的依赖关系不满足

问题,我怎样才能得到杰克逊提供者?

【问题讨论】:

  • 我不知道杰克逊罐子是否真的在战争中,请也添加该输出。

标签: json jackson jax-rs wildfly-8 jboss-arquillian


【解决方案1】:

这里最重要的是获得测试时间,与 JAX-RS 实现将使用的 ObjectMapper 相同。

这很重要,因为我在提供程序中配置了一些与此对象相关的设置:

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonConfig implements ContextResolver<ObjectMapper> {

    @Override
    public ObjectMapper getContext(final Class<?> type) {

        final ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.setSerializationInclusion(Include.NON_EMPTY);

        return mapper;
    }

}

所以,使用这个provider 很重要。

所以,为了注入这个对象,我编写了这个注入代码:

@Inject private ContextResolver<ObjectMapper> mapperResolver;

【讨论】:

    【解决方案2】:

    默认情况下,ObjectMapper 没有生产者,除非您明确提供了一个。如果您将注入点替换为 ObjectMapper 的实例化,例如private ObjectMapper objectMapper = new ObjectMapper()你会避免注入问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2015-01-16
      • 2021-01-04
      • 2014-03-18
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多