ServiceProviderConfig request throws MessageBodyWriter not found for media type exception
dhubbard-ag opened this issue · comments
Describe the bug
A request to service for /ServiceProviderConfig returns a 500 error, throws a JavaException
Severe: MessageBodyWriter not found for media type=application/scim+json, type=class com.unboundid.scim2.common.GenericScimResource, genericType=class com.unboundid.scim2.common.GenericScimResource.
I found a similar problem #131 - and followed the resolution there and added jackson media dependency
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.30</version>
</dependency>
With this the exception changes to:
Severe: MessageBodyWriter not found for media type=application/json, type=class com.unboundid.scim2.common.GenericScimResource, genericType=class com.unboundid.scim2.common.GenericScimResource.
To Reproduce
-
Created a new Web Application Maven project (in NetBeans 8.2)
-
Added ServiceProviderConfigEndpoint (based on TestServiceProviderConfigEndpoint.java in Server project.
package com.mycompany.scim;
import com.unboundid.scim2.common.types.AuthenticationScheme;
import com.unboundid.scim2.common.types.BulkConfig;
import com.unboundid.scim2.common.types.ChangePasswordConfig;
import com.unboundid.scim2.common.types.ETagConfig;
import com.unboundid.scim2.common.types.FilterConfig;
import com.unboundid.scim2.common.types.PatchConfig;
import com.unboundid.scim2.common.types.ServiceProviderConfigResource;
import com.unboundid.scim2.common.exceptions.ScimException;
import com.unboundid.scim2.common.types.SortConfig;
import static com.unboundid.scim2.common.utils.ApiConstants.MEDIA_TYPE_SCIM;
import com.unboundid.scim2.server.annotations.ResourceType;
import com.unboundid.scim2.server.resources.
AbstractServiceProviderConfigEndpoint;
import java.util.Collections;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
* A test Service Provider Config endpoint implementation that just serves up
* a canned config.
*/
@ResourceType(
description = "SCIM 2.0 Service Provider Config",
name = "ServiceProviderConfig",
schema = ServiceProviderConfigResource.class,
discoverable = false)
@Path("/ServiceProviderConfig")
public class ServiceProviderConfigEndpoint
extends AbstractServiceProviderConfigEndpoint
{
/**
* {@inheritDoc}
*/
@Override
@Produces({MEDIA_TYPE_SCIM, MediaType.APPLICATION_JSON})
public ServiceProviderConfigResource getServiceProviderConfig()
throws ScimException
{
System.out.println("Received Get for /ServiceProviderConfig");
return create();
}
/**
* Create a test config resource.
*
* @return The created resource.
*/
public static ServiceProviderConfigResource create()
{
return new ServiceProviderConfigResource("https://doc",
new PatchConfig(true),
new BulkConfig(true, 100, 1000),
new FilterConfig(true, 200),
new ChangePasswordConfig(true),
new SortConfig(true),
new ETagConfig(false),
Collections.singletonList(
new AuthenticationScheme(
"Basic", "HTTP BASIC", null, null, "httpbasic", true)));
}
}
-
Deploy to Glassfish
-
Call http://localhost:8880/SCIMProvider/rest/ServiceProviderConfig
Expected behavior
Should return the generated json data (this from log message before exception) with a 200 response
{
"schemas" : [ "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig" ],
"documentationUri" : "https://doc",
"patch" : {
"supported" : true
},
"bulk" : {
"supported" : true,
"maxOperations" : 100,
"maxPayloadSize" : 1000
},
"filter" : {
"supported" : true,
"maxResults" : 200
},
"changePassword" : {
"supported" : true
},
"sort" : {
"supported" : true
},
"etag" : {
"supported" : false
},
"authenticationSchemes" : [ {
"name" : "Basic",
"description" : "HTTP BASIC",
"type" : "httpbasic",
"primary" : true
} ],
"meta" : {
"resourceType" : "ServiceProviderConfig",
"location" : "http://localhost:8880/SCIMProvider/rest/ServiceProviderConfig"
}
Additional context
- Java version: Java 8
- Server: Glassfish 4.1
- SCIM 2 SDK version: 2.3.2