@Override
	public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
		Object response = responseContext.getEntity();
		if (response == null) {
			return;
		}
		
		// only modify responses which contain a single or a list of Katharsis resources
		if (isResourceResponse(response)) {
			KatharsisBoot boot = feature.getBoot();
			ResourceRegistry resourceRegistry = boot.getResourceRegistry();
			DocumentMapper documentMapper = boot.getDocumentMapper();
			
			ServiceUrlProvider serviceUrlProvider = resourceRegistry.getServiceUrlProvider();
			try {
				UriInfo uriInfo = requestContext.getUriInfo();
				if (serviceUrlProvider instanceof UriInfoServiceUrlProvider) {
					((UriInfoServiceUrlProvider) serviceUrlProvider).onRequestStarted(uriInfo);
				}

				JsonApiResponse jsonApiResponse = new JsonApiResponse();
				jsonApiResponse.setEntity(response);
				// use the Katharsis document mapper to create a JSON API response
				responseContext.setEntity(documentMapper.toDocument(jsonApiResponse, null));
				responseContext.getHeaders().put("Content-Type", Arrays.asList((Object)JsonApiMediaType.APPLICATION_JSON_API));
				
			}
			finally {
				if (serviceUrlProvider instanceof UriInfoServiceUrlProvider) {
					((UriInfoServiceUrlProvider) serviceUrlProvider).onRequestFinished();
				}
			}
		}
	}
@ Override public void filter ( ContainerRequestContext requestContext , ContainerResponseContext responseContext ) throws IOException { Object response = responseContext . getEntity ( ) ; if ( response == null ) { return ; } if ( isResourceResponse ( response ) ) { KatharsisBoot boot = feature . getBoot ( ) ; ResourceRegistry resourceRegistry = boot . getResourceRegistry ( ) ; DocumentMapper documentMapper = boot . getDocumentMapper ( ) ; ServiceUrlProvider serviceUrlProvider = resourceRegistry . getServiceUrlProvider ( ) ; try { UriInfo uriInfo = requestContext . getUriInfo ( ) ; if ( serviceUrlProvider instanceof UriInfoServiceUrlProvider ) { ( ( UriInfoServiceUrlProvider ) serviceUrlProvider ) . onRequestStarted ( uriInfo ) ; } JsonApiResponse jsonApiResponse = new JsonApiResponse ( ) ; jsonApiResponse . setEntity ( response ) ; responseContext . setEntity ( documentMapper . toDocument ( jsonApiResponse , null ) ) ; responseContext . getHeaders ( ) . put ( "Content-Type" , Arrays . asList ( ( Object ) JsonApiMediaType . APPLICATION_JSON_API ) ) ; } finally { if ( serviceUrlProvider instanceof UriInfoServiceUrlProvider ) { ( ( UriInfoServiceUrlProvider ) serviceUrlProvider ) . onRequestFinished ( ) ; } } } }
Creates JSON API responses for custom JAX-RS actions returning Katharsis resources.