Can somebody confirm if the scenario below is possible or not?
I want to use the following filter in my standalone application (no servlet
or EE container or whatever).
package somepackage.client.response;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientResponseContext;
import javax.ws.rs.client.ClientResponseFilter;
import org.glassfish.jersey.message.MessageBodyWorkers;
import org.jvnet.hk2.annotations.Service;
import org.slf4j.Logger;
@Service
public class ResponseFilter implements ClientResponseFilter {
@Inject
private MessageBodyWorkers workers;
private final Logger logger;
public ResponseFilter(Logger logger) {
this.logger = logger;
}
@Override
public void filter(ClientRequestContext requestContext,
ClientResponseContext responseContext)
throws IOException {
System.out.println(String.format("MessageBodyWorkers: [%s]",
workers));
if (responseValid(responseContext)) {
return;
}
logger.error("Error", new Object(), new Object(), new Object());
}
private boolean responseValid(ClientResponseContext responseContext) {
if (responseContext.getStatus() == HttpServletResponse.SC_OK) {
return true;
}
return false;
}
}
Then my idea was to register this HK2 AbstractBinder class in my client:
package somepackage.client;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import somepackage.client.response.ResponseFilter;
public class SitemapBinder extends AbstractBinder {
@Override
protected void configure() {
bind(ResponseFilter.class).to(ResponseFilter.class);
}
}
I wanted to do something like this (client is a JerseyClient instance):
client.register(new SitemapBinder());
But after performing the above nothing happens. I mean
the MessageBodyWorkers reference is not getting injected however I try it.
What am I missing here? Is it even possible? Or is there a workaround to
make this work?
Any help is appreciated.
Kind regards,
Gergely Nagy