Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8703011
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T02:47:09+00:00 2026-06-13T02:47:09+00:00

RESTEasy mock framework works fine without exception mapper–request is received and entity is returned

  • 0

RESTEasy mock framework works fine without exception mapper–request is received and entity is returned with expected contents.

After registering exception mapper and forcing an exception, call fails when innards of RESTEasy call ResteasyProviderFactory.getContextData(type), which returns null, resulting in unexpected error message: “Unable to find contextual data of type: javax.servlet.http.HttpServletRequest”.

Couldn’t find any examples anywhere online of RESTEasy mock plus an exception mapper, and couldn’t find anything useful about the error either.

Client class:

package com.foo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "foo-type", propOrder = {
    "name"
})
@XmlRootElement(name = "foo")
public class Foo {

    protected String name;

    public String getName() {
        return name;
    }

    public void setName(String value) {
        this.name = value;
    }
}

Object factory:

package com.foo;

import javax.xml.bind.annotation.XmlRegistry;

@XmlRegistry
public class ObjectFactory {

    public ObjectFactory() {
    }

    public Foo createFoo() {
        return new Foo();
    }
}

Validation exception:

package com.foo;

public class ValidationException extends RuntimeException {

    private static final long serialVersionUID = -8100360206713223313L;

    public ValidationException(String message) {
        super(message);
    }

    public ValidationException(Exception innerException) {
        super(innerException);
    }

    public ValidationException(String message, Exception innerException) {
        super(message, innerException);
    }
}

Service endpoint:

package com.foo;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/rest/v1")
public class FooService {

    @GET
    @Path("/foo")
    @Produces("application/xml")
    public Foo alwaysBlowUp() throws ValidationException {
        if (System.currentTimeMillis() > 0) {
            throw new ValidationException("FOO");
        }
        return null;
    }
}

Exception mapper:

package com.foo;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class FooExceptionMapper implements ExceptionMapper<ValidationException> {

    @Context
    private static HttpServletRequest request;
    @Context
    private static HttpHeaders headers;

    @Override
    public Response toResponse(ValidationException exception) {
        MediaType mediaType = null;

/*
Set breakpoint on line below.
Step over line and you get the exception in the logs.
Step into the line and the problem is in ResteasyProviderFactory:

public static <T> T getContextData(Class<T> type)
{
    return (T) getContextDataMap().get(type); <<< type == javax.servlet.http.HttpServletRequest
}

The type is not in the map, so it returns null.

The null results in this error in ContextParameterInjector:

private class GenericDelegatingProxy implements InvocationHandler
{
    public Object invoke(Object o, Method method, Object[] objects) throws Throwable
    {
        try
        {
            Object delegate = ResteasyProviderFactory.getContextData(type);
            if (delegate == null)
               throw new LoggableFailure("Unable to find contextual data of type: " + type.getName()); <<< ERROR IN LOGS
*/

        String acceptHeader = request.getHeader("accept");

        if (MediaType.APPLICATION_XML.equals(acceptHeader)) {
            mediaType = MediaType.APPLICATION_XML_TYPE;
        } else if (MediaType.APPLICATION_JSON.equals(acceptHeader)) {
            mediaType = MediaType.APPLICATION_JSON_TYPE;
        } else {
            mediaType = headers.getMediaType();

            if (mediaType == null) {
                mediaType = MediaType.APPLICATION_XML_TYPE;
            }
        }

        ResponseBuilder builder = Response.status(Status.BAD_REQUEST);
        builder.type(mediaType);
        return builder.build();
    }
}

Test:

package com.foo;

import java.net.URISyntaxException;

import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory;

public final class TestFooExceptionMapper {

    public static void main(String[] args) throws URISyntaxException {
        Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
        dispatcher.getRegistry().addResourceFactory(new POJOResourceFactory(FooService.class));
        dispatcher.getProviderFactory().addExceptionMapper(FooExceptionMapper.class);

        MockHttpRequest request = MockHttpRequest.get("/rest/v1/foo");
        MockHttpResponse response = new MockHttpResponse();
        dispatcher.invoke(request, response);
    }
}

Error:

Aug 26, 2012 10:44:26 PM org.jboss.resteasy.core.SynchronousDispatcher 
SEVERE: Failed executing GET /rest/v1/foo
org.jboss.resteasy.spi.LoggableFailure: Unable to find contextual data of type: javax.servlet.http.HttpServletRequest
    at org.jboss.resteasy.core.ContextParameterInjector$GenericDelegatingProxy.invoke(ContextParameterInjector.java:56)
    at $Proxy18.getHeader(Unknown Source)
    at com.foo.FooExceptionMapper.toResponse(FooExceptionMapper.java:51)
    at com.foo.FooExceptionMapper.toResponse(FooExceptionMapper.java:1)
    at org.jboss.resteasy.core.SynchronousDispatcher.executeExceptionMapper(SynchronousDispatcher.java:330)
    at org.jboss.resteasy.core.SynchronousDispatcher.unwrapException(SynchronousDispatcher.java:359)
    at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:348)
    at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:220)
    at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:196)
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:551)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:513)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:125)
    at com.foo.TestFooExceptionMapper.main(TestFooExceptionMapper.java:20)
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T02:47:10+00:00Added an answer on June 13, 2026 at 2:47 am

    The problem is that the ‘mock framework’ does not supply a HttpServletRequest to the context. It’s not directly related to the ExceptionMapper.

    Resteasy injects @Context fields based on data that is present in the ResteasyProviderFactory.getContextDataMap(). When this map does not contain an instance of HttpServletRequest, it blows up whith the error ‘Unable to find contextual data of type…’

    I have worked around this by putting a mock HttpServletRequest into the resteasy context:

    Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
    dispatcher.getRegistry().addSingletonResource(new Service());
    
    ResteasyProviderFactory
            .getContextDataMap()
            .put(HttpServletRequest.class, new MockHttpServletRequest());
    
    MockHttpResponse response = new MockHttpResponse();
    
    dispatcher.invoke(
        MockHttpRequest.get("/"),
        response
    );
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I produce json using resteasy. Everything works fine but... I can't order the parameters
I'm using RESTEasy and more specifically, the client side of their framework. I'm calling
I want to test my REST-Service using the RestEasy Client Framework. In my application
In my RESTEasy application I'm getting a java.lang.reflect.UndeclaredThrowableException , because a checked exception is
I am using RestEasy to marchal entities to JSON. That works okay but somehow
I am building Resteasy services with MongoDb as the database. It works perfectly on
In RESTeasy this... @GET @Path(request) public String requestJson(@QueryParam(arg1) @DefaultValue() String arg1, @QueryParam(arg2) @DefaultValue(0) Integer
I'm using RESTeasy framework to develop my web service. I've managed to set up
Yesterday I tried to use the client side of the RestEasy framework. The interface
I'm using the RestEasy Client Framework in a @Named @ViewScoped Bean with JBoss-7.1.1-Final to

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.