You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by bl...@apache.org on 2009/09/25 00:39:31 UTC
svn commit: r818645 - in /incubator/wink/trunk:
wink-common/src/main/resources/org/apache/wink/common/internal/i18n/
wink-server/src/main/java/org/apache/wink/server/internal/handlers/
Author: bluk
Date: Thu Sep 24 22:39:30 2009
New Revision: 818645
URL: http://svn.apache.org/viewvc?rev=818645&view=rev
Log:
Add debug statements to server handlers
Modified:
incubator/wink/trunk/wink-common/src/main/resources/org/apache/wink/common/internal/i18n/resource.properties
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CheckLocationHeaderHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CreateInvocationParametersHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindResourceMethodHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindRootResourceHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FlushResultHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/HeadMethodHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/OptionsMethodHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateErrorResponseHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseMediaTypeHandler.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseStatusHandler.java
Modified: incubator/wink/trunk/wink-common/src/main/resources/org/apache/wink/common/internal/i18n/resource.properties
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/resources/org/apache/wink/common/internal/i18n/resource.properties?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/resources/org/apache/wink/common/internal/i18n/resource.properties (original)
+++ incubator/wink/trunk/wink-common/src/main/resources/org/apache/wink/common/internal/i18n/resource.properties Thu Sep 24 22:39:30 2009
@@ -119,3 +119,8 @@
clientIssueRequest=Issuing client {} method request to URI at {} with {} entity class and {} headers
clientAcceptHeaderHandlerSetAccept=Accept header automatically set to: {}
clientResponseIsErrorCode=Client response is an error code: {}
+
+# Server Handlers
+checkLocationHeaderHandlerIllegalArg=Mandatory 'Location' header was not set for status code %1$s
+populateResponseMediaTypeHandlerFromCompatibleMessageBodyWriters=Content-Type not specified via Response object or via @Produces annotation so automatically setting via generic-type compatible MessageBodyWriter providers
+populateResponseMediaTypeHandlerNoAcceptableResponse=No acceptable concrete Content-Types, so sending a 406 Not Acceptable response to the client.
\ No newline at end of file
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CheckLocationHeaderHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CheckLocationHeaderHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CheckLocationHeaderHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CheckLocationHeaderHandler.java Thu Sep 24 22:39:30 2009
@@ -23,6 +23,7 @@
import javax.ws.rs.core.Response;
import org.apache.wink.common.http.HttpStatus;
+import org.apache.wink.common.internal.i18n.Messages;
import org.apache.wink.server.handlers.AbstractHandler;
import org.apache.wink.server.handlers.MessageContext;
@@ -39,8 +40,8 @@
if (result instanceof Response && isStatusWithLocation(statusCode)) {
Response clientResponse = (Response)result;
if (!clientResponse.getMetadata().containsKey(HttpHeaders.LOCATION)) {
- throw new IllegalStateException(
- "Mandatory 'Location' header was not set for status code " + statusCode);
+ throw new IllegalStateException(Messages
+ .getMessage("checkLocationHeaderHandlerIllegalArg", statusCode));
}
}
}
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CreateInvocationParametersHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CreateInvocationParametersHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CreateInvocationParametersHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/CreateInvocationParametersHandler.java Thu Sep 24 22:39:30 2009
@@ -28,15 +28,21 @@
import org.apache.wink.server.handlers.HandlersChain;
import org.apache.wink.server.handlers.MessageContext;
import org.apache.wink.server.handlers.RequestHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class CreateInvocationParametersHandler implements RequestHandler {
+ private Logger logger = LoggerFactory.getLogger(CreateInvocationParametersHandler.class);
+
public void handleRequest(MessageContext context, HandlersChain chain) throws Throwable {
SearchResult result = context.getAttribute(SearchResult.class);
// create and save the invocation parameters for the found method
List<Injectable> formal = result.getMethod().getMetadata().getFormalParameters();
+ logger.debug("Formal Injectable parameters listis: {}", formal);
Object[] parameters = InjectableFactory.getInstance().instantiate(formal, context);
+ logger.debug("Actual parameters list to inject is: {}", parameters);
result.setInvocationParameters(parameters);
chain.doChain(context);
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindResourceMethodHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindResourceMethodHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindResourceMethodHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindResourceMethodHandler.java Thu Sep 24 22:39:30 2009
@@ -29,6 +29,7 @@
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
+import org.apache.wink.common.internal.registry.metadata.MethodMetadata;
import org.apache.wink.common.internal.uritemplate.UriTemplateMatcher;
import org.apache.wink.common.internal.uritemplate.UriTemplateProcessor;
import org.apache.wink.server.handlers.HandlersChain;
@@ -43,10 +44,14 @@
import org.apache.wink.server.internal.registry.SubResourceInstance;
import org.apache.wink.server.internal.registry.SubResourceMethodRecord;
import org.apache.wink.server.internal.registry.SubResourceRecord;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class FindResourceMethodHandler implements RequestHandler {
- private boolean isContinuedSearchPolicy;
+ private boolean isContinuedSearchPolicy;
+
+ private final Logger logger = LoggerFactory.getLogger(FindResourceMethodHandler.class);
public void handleRequest(MessageContext context, HandlersChain chain) throws Throwable {
@@ -55,6 +60,7 @@
// resource method
if (resource.isExactMatch()) {
+ logger.debug("Root resource @Path matches exactly so finding root resource method");
handleResourceMethod(context, chain);
return;
}
@@ -62,9 +68,11 @@
// sub-resource method or locator
UriTemplateMatcher templateMatcher = resource.getMatcher();
String tail = UriTemplateProcessor.normalizeUri(templateMatcher.getTail(false));
+ logger.debug("Unmatched tail to the URI: {}", tail);
- // get a sorted set of all the sub-resources (methods and locators)
+ // get a sorted list of all the sub-resources (methods and locators)
List<SubResourceInstance> subResources = resource.getRecord().getMatchingSubResources(tail);
+ logger.debug("Possible subresources found: {}", subResources);
if (subResources.size() == 0) {
result.setError(new WebApplicationException(Response.Status.NOT_FOUND));
return;
@@ -72,7 +80,7 @@
// get all the searchable sub-resources
List<SubResourceInstance> searchableSubResources = getSearchableSubResources(subResources);
-
+ logger.debug("Possible searchable subresources found: {}", searchableSubResources);
// save the current data in case we need to role back the information if
// the search fails and we will need to continue to the next
// sub-resource
@@ -129,6 +137,10 @@
result.setFound(true);
result.setMethod(method);
// continue the chain to invoke the method
+ if (logger.isDebugEnabled()) {
+ MethodMetadata metadata = (method == null) ? null : method.getMetadata();
+ logger.debug("Found root resource method to invoke: {} ", metadata);
+ }
chain.doChain(context);
}
@@ -157,6 +169,10 @@
saveFoundMethod(result, matcher, method, context);
// continue the chain to invoke the method
+ if (logger.isDebugEnabled()) {
+ MethodMetadata metadata = (method == null) ? null : method.getMetadata();
+ logger.debug("Found subresource method to invoke: {} ", metadata);
+ }
chain.doChain(context);
}
@@ -179,12 +195,18 @@
saveFoundMethod(result, matcher, subResourceInstance, context);
// continue the chain to invoke the locator
+ if (logger.isDebugEnabled()) {
+ MethodMetadata metadata =
+ (subResourceInstance == null) ? null : subResourceInstance.getMetadata();
+ logger.debug("Found subresource locator to invoke: {} ", metadata);
+ }
chain.doChain(context);
// the object returned from the locator is a sub-resource so we must
// continue the search in it
Object subResource = context.getResponseEntity();
if (subResource == null) {
+ logger.debug("Subresource returned was null so returning a 404 Not Found");
result.setError(new WebApplicationException(Status.NOT_FOUND));
return;
}
@@ -195,6 +217,9 @@
// call recursively to search in the sub-resource
result.setFound(false);
+ logger
+ .debug("Re-invoking the chain (due to hitting a subresource locator method) with the new subresource instance {}",
+ resourceInstance);
handleRequest(context, chain);
}
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindRootResourceHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindRootResourceHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindRootResourceHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FindRootResourceHandler.java Thu Sep 24 22:39:30 2009
@@ -50,8 +50,9 @@
// create a path stripped from all matrix parameters to use for matching
List<PathSegment> segments = context.getUriInfo().getPathSegments(false);
+ logger.debug("Getting URI Info path segments: {}", segments);
String strippedPath = buildPathForMatching(segments);
-
+ logger.debug("Getting stripped path from segments: {}", strippedPath);
// get a list of root resources that can handle the request
// JAX-RS specification requires to search only the first matching
@@ -60,6 +61,7 @@
// matching resources
List<ResourceInstance> matchedResources =
registry.getMatchingRootResources(strippedPath, isContinuedSearchPolicy);
+ logger.debug("Found resource instances: {}", matchedResources);
if (matchedResources.size() == 0) {
logger.debug("No resource found matching {}", context.getUriInfo().getPath(false));
SearchResult result =
@@ -82,6 +84,8 @@
headSegmentsCount,
result.getData().getMatchedVariablesPathSegments());
+ logger.debug("Using SearchResult: {}", result);
+
// continue that chain to find the actual resource that will handle
// the request.
// it may be the current resource or a sub-resource of the current
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FlushResultHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FlushResultHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FlushResultHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/FlushResultHandler.java Thu Sep 24 22:39:30 2009
@@ -77,6 +77,7 @@
}
// set the status code
+ logger.debug("Response status code set to: {}", statusCode);
httpResponse.setStatus(statusCode);
// get the entity
@@ -127,6 +128,7 @@
// we're done if the actual entity is null
if (entity == null) {
+ logger.debug("No entity so writing only the headers");
flushHeaders(httpResponse, httpHeaders);
return;
}
@@ -134,6 +136,7 @@
// we have an entity, set the response media type
MediaType responseMediaType = context.getResponseMediaType();
if (responseMediaType != null) {
+ logger.debug("Set response Content-Type to: {} ", responseMediaType);
httpResponse.setContentType(responseMediaType.toString());
}
@@ -208,10 +211,13 @@
RequestImpl.VaryHeader varyHeader =
RuntimeContextTLS.getRuntimeContext().getAttribute(RequestImpl.VaryHeader.class);
if (varyHeader != null) {
+ logger.debug("Vary header automatically set by a call to RequestImpl");
headers.putSingle(HttpHeaders.VARY, varyHeader.getVaryHeaderValue());
}
}
+ logger.debug("Flushing headers: {}", headers);
+
for (Entry<String, List<Object>> entry : headers.entrySet()) {
String key = entry.getKey();
List<Object> values = entry.getValue();
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/HeadMethodHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/HeadMethodHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/HeadMethodHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/HeadMethodHandler.java Thu Sep 24 22:39:30 2009
@@ -35,9 +35,15 @@
import org.apache.wink.server.handlers.MessageContext;
import org.apache.wink.server.handlers.RequestHandler;
import org.apache.wink.server.handlers.ResponseHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class HeadMethodHandler implements RequestHandler, ResponseHandler {
+ private static final Logger logger =
+ LoggerFactory
+ .getLogger(HeadMethodHandler.class);
+
private static final String ORIGINAL_RESPONSE_ATT_NAME =
HeadMethodHandler.class.getName() + "_original_response";
@@ -54,6 +60,8 @@
if (searchResult.isError() && searchResult.getError().getResponse().getStatus() == HttpStatus.METHOD_NOT_ALLOWED
.getCode()
&& context.getHttpMethod().equalsIgnoreCase(HttpMethod.HEAD)) {
+ logger
+ .debug("No HEAD method so trying GET method while not sending the response entity");
context.setHttpMethod(HttpMethod.GET);
HttpServletResponse originalResponse = context.getAttribute(HttpServletResponse.class);
NoBodyResponse noBodyResponse = new NoBodyResponse(originalResponse);
@@ -69,7 +77,7 @@
if (originalResponse != null) {
HttpServletResponse response = context.getAttribute(HttpServletResponse.class);
response.flushBuffer();
- response.setContentLength(((NoBodyResponse)response).getContentLenghtValue());
+ response.setContentLength(((NoBodyResponse)response).getContentLengthValue());
// set the original response on the context
context.setAttribute(HttpServletResponse.class, originalResponse);
}
@@ -85,7 +93,7 @@
super(servletResponse);
}
- int getContentLenghtValue() {
+ int getContentLengthValue() {
return countingStream.getByteCount();
}
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/OptionsMethodHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/OptionsMethodHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/OptionsMethodHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/OptionsMethodHandler.java Thu Sep 24 22:39:30 2009
@@ -33,9 +33,13 @@
import org.apache.wink.server.handlers.MessageContext;
import org.apache.wink.server.handlers.RequestHandler;
import org.apache.wink.server.internal.registry.ResourceRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class OptionsMethodHandler implements RequestHandler {
+ private static final Logger logger = LoggerFactory.getLogger(OptionsMethodHandler.class);
+
public void handleRequest(MessageContext context, HandlersChain chain) throws Throwable {
// first thing - proceed the chain
@@ -51,6 +55,10 @@
// get supported HTTP methods
ResourceRegistry resourceRegistry = context.getAttribute(ResourceRegistry.class);
Set<String> httpMethods = resourceRegistry.getOptions(searchResult.getResource());
+ logger
+ .debug("Invoking OPTIONS request handled by runtime with {} resource and {} HTTP methods",
+ searchResult.getResource(),
+ httpMethods);
if (httpMethods.size() > 0) {
String allowHeader = HeaderUtils.buildOptionsHeader(httpMethods);
// add 'Allow' header to the response
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateErrorResponseHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateErrorResponseHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateErrorResponseHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateErrorResponseHandler.java Thu Sep 24 22:39:30 2009
@@ -47,6 +47,7 @@
ExceptionMapper<Throwable> provider =
(ExceptionMapper<Throwable>)findProvider(context, exception);
if (provider != null) {
+ logger.debug("Using provider {} to map exception {}", provider, exception);
context.setResponseEntity(executeProvider(exception, provider));
} else {
throw exception;
@@ -73,12 +74,16 @@
WebApplicationException exception) {
ExceptionMapper<WebApplicationException> provider = null;
if (exception.getResponse().getEntity() == null) {
+ // only look for a provider if the response entity on the
+ // WebApplicationException is null (per spec)
provider =
(ExceptionMapper<WebApplicationException>)findProvider(msgContext, exception);
}
if (provider != null) {
+ logger.debug("Using ExceptionMapper to map response from WebApplicationException");
msgContext.setResponseEntity(provider.toResponse(exception));
} else {
+ logger.debug("Getting response directly from WebApplicationException");
msgContext.setResponseEntity(exception.getResponse());
}
}
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseMediaTypeHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseMediaTypeHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseMediaTypeHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseMediaTypeHandler.java Thu Sep 24 22:39:30 2009
@@ -28,14 +28,21 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.wink.common.internal.i18n.Messages;
import org.apache.wink.common.internal.registry.ProvidersRegistry;
import org.apache.wink.common.internal.registry.metadata.MethodMetadata;
import org.apache.wink.common.internal.utils.MediaTypeUtils;
import org.apache.wink.server.handlers.AbstractHandler;
import org.apache.wink.server.handlers.MessageContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class PopulateResponseMediaTypeHandler extends AbstractHandler {
+ private static final Logger logger =
+ LoggerFactory
+ .getLogger(PopulateResponseMediaTypeHandler.class);
+
private static final MediaType APPLICATION_TYPE = new MediaType("application", "*");
private boolean errorFlow = false;
@@ -46,6 +53,7 @@
Object result = context.getResponseEntity();
if (result == null) {
+ logger.debug("No entity so no Content-Type needs to be set");
return;
}
@@ -61,6 +69,7 @@
responseMediaType = MediaType.valueOf(first.toString());
}
}
+ logger.debug("Content-Type was set by application to {}", responseMediaType);
}
if (responseMediaType == null) {
@@ -69,11 +78,23 @@
if (searchResult != null && searchResult.isFound()) {
MethodMetadata methodMetadata = searchResult.getMethod().getMetadata();
producedMime = methodMetadata.getProduces();
+ logger.debug("Determining Content-Type from @Produces on method: {}", producedMime);
}
if (producedMime == null || producedMime.isEmpty()) {
producedMime =
context.getAttribute(ProvidersRegistry.class)
.getMessageBodyWriterMediaTypes(result.getClass());
+ /*
+ * This is to inform the application developer that they should
+ * specify the Content-Type.
+ */
+ logger
+ .info(Messages
+ .getMessage("populateResponseMediaTypeHandlerFromCompatibleMessageBodyWriters"));
+ logger
+ .debug("Determining Content-Type from compatible generic type to {} from MessageBodyWriters: {}",
+ result.getClass(),
+ producedMime);
}
if (producedMime.isEmpty()) {
producedMime.add(MediaType.WILDCARD_TYPE);
@@ -86,6 +107,7 @@
List<CandidateMediaType> candidates = new LinkedList<CandidateMediaType>();
for (MediaType acceptableMediaType : acceptableMediaTypes) {
for (MediaType mediaType : producedMime) {
+ logger.debug("Comparing {} to {}", acceptableMediaType, mediaType);
if (mediaType.isCompatible(acceptableMediaType)) {
MediaType candidateMediaType = null;
if (MediaTypeUtils.compareTo(mediaType, acceptableMediaType) > 0) {
@@ -93,10 +115,18 @@
} else {
candidateMediaType = acceptableMediaType;
}
+ logger.debug("MediaType compatible so using candidate type {}",
+ candidateMediaType);
String q = acceptableMediaType.getParameters().get("q");
CandidateMediaType candidate =
new CandidateMediaType(candidateMediaType, q);
if (Double.compare(candidate.q, 0.0) != 0) {
+ if (logger.isDebugEnabled()) {
+ logger
+ .debug("Candidate {} has q value {} so adding to possible candidates",
+ candidate.getMediaType(),
+ q);
+ }
candidates.add(candidate);
}
}
@@ -106,8 +136,11 @@
// there are no candidates
if (candidates.isEmpty()) {
if (isErrorFlow()) {
+ logger.debug("Error flow and no candidates so not going to set a Content-Type");
return;
}
+ logger.info(Messages
+ .getMessage("populateResponseMediaTypeHandlerNoAcceptableResponse"));
throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
}
@@ -119,6 +152,10 @@
for (CandidateMediaType candidate : candidates) {
if (max == null) {
max = candidate;
+ if (logger.isDebugEnabled()) {
+ logger.debug("No previous best candidate so using candidate {}", max
+ .getMediaType());
+ }
} else {
// select the more specific media type before a media type
// that has a wildcard in it
@@ -127,13 +164,27 @@
MediaTypeUtils.compareTo(candidate.getMediaType(), max.getMediaType());
if (comparison > 0) {
max = candidate;
+ if (logger.isDebugEnabled()) {
+ logger
+ .debug("Best candidate is now {} because it was a more specific media type",
+ max.getMediaType());
+ }
} else if (comparison == 0 && candidate.getQ() > max.getQ()) {
max = candidate;
+ if (logger.isDebugEnabled()) {
+ logger
+ .debug("Best candidate is now {} because it had a higher quality value {} compared to {} with quality value {}",
+ new Object[] {max.getMediaType(), max.getQ(), candidate,
+ candidate.getQ()});
+ }
}
}
if (!useOctetStream && (candidate.getMediaType().equals(MediaType.WILDCARD_TYPE) || candidate
.getMediaType().equals(APPLICATION_TYPE))) {
+ logger
+ .debug("If necessary, use an application/octet-stream because there is a wildcard",
+ candidate.getMediaType());
useOctetStream = true;
}
}
@@ -141,15 +192,21 @@
if (max.getMediaType().isWildcardSubtype() == false) {
responseMediaType = max.getMediaType();
} else if (useOctetStream) {
+ logger
+ .debug("Content-Type was reset to application/octet-stream because it was either */* or was application/*");
responseMediaType = MediaType.APPLICATION_OCTET_STREAM_TYPE;
} else {
if (isErrorFlow()) {
+ logger.debug("Error flow so not going to set a response Content-Type");
return;
}
+ logger.info(Messages
+ .getMessage("populateResponseMediaTypeHandlerNoAcceptableResponse"));
throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
}
}
+ logger.debug("Response Content-Type will be set to {}", responseMediaType);
context.setResponseMediaType(responseMediaType);
}
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseStatusHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseStatusHandler.java?rev=818645&r1=818644&r2=818645&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseStatusHandler.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/PopulateResponseStatusHandler.java Thu Sep 24 22:39:30 2009
@@ -25,9 +25,15 @@
import org.apache.wink.server.handlers.AbstractHandler;
import org.apache.wink.server.handlers.MessageContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class PopulateResponseStatusHandler extends AbstractHandler {
+ private static final Logger logger =
+ LoggerFactory
+ .getLogger(PopulateResponseStatusHandler.class);
+
public void handleResponse(MessageContext context) throws Throwable {
Object entity = context.getResponseEntity();
@@ -45,9 +51,13 @@
}
if (status == -1) {
- status = HttpServletResponse.SC_OK;
if (entity == null) {
+ logger
+ .debug("No status set and no entity so setting response status to 204 No Content");
status = HttpServletResponse.SC_NO_CONTENT;
+ } else {
+ logger.debug("No status set so setting response status to 200 OK");
+ status = HttpServletResponse.SC_OK;
}
}