You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wink.apache.org by Jason Dillon <ja...@planet57.com> on 2010/10/25 19:01:59 UTC

Re: svn commit: r1027186 - in /incubator/wink/trunk/wink-common/src/main: java/org/apache/wink/common/internal/ java/org/apache/wink/common/internal/application/ java/org/apache/wink/common/internal/lifecycle/ java/org/apache/wink/common/internal/providers...

Just a general comment.  The formatting of logging related code in wink is really awful...

:-(

--jason

 
On Oct 25, 2010, at 9:32 AM, jramos@apache.org wrote:

> Author: jramos
> Date: Mon Oct 25 16:32:45 2010
> New Revision: 1027186
> 
> URL: http://svn.apache.org/viewvc?rev=1027186&view=rev
> Log:
> [Wink-323] Logging improvements for wink-common
> 
> Modified:
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/UriBuilderImpl.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationFileLoader.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationValidator.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/CreationUtils.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/LifecycleManagersRegistry.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBXmlProvider.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ApplicationMetadataCollector.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ConstructorMetadata.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/MethodMetadata.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ProviderMetadataCollector.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java
>    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/model/multipart/OutPart.java
>    incubator/wink/trunk/wink-common/src/main/resources/org/apache/wink/common/internal/i18n/resource.properties
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/UriBuilderImpl.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/UriBuilderImpl.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/UriBuilderImpl.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/UriBuilderImpl.java Mon Oct 25 16:32:45 2010
> @@ -351,7 +351,7 @@ public class UriBuilderImpl extends UriB
>                 return uri;
>             } catch (URISyntaxException e) {
>                 throw new IllegalArgumentException(Messages
> -                    .getMessage("isInvalid", "schemeSpecificPart"), e); //$NON-NLS-1$ //$NON-NLS-2$
> +                    .getMessage("isInvalid", "schemeSpecificPart", schemeSpecificPart), e); //$NON-NLS-1$ //$NON-NLS-2$
>             }
>         }
> 
> @@ -610,7 +610,7 @@ public class UriBuilderImpl extends UriB
>         isFirstCall = false;
>         Path pathAnnotation = ((Class<?>)resource).getAnnotation(Path.class);
>         if (pathAnnotation == null) {
> -            throw new IllegalArgumentException(Messages.getMessage("resourceNotAnnotated", "Path")); //$NON-NLS-1$ //$NON-NLS-2$
> +            throw new IllegalArgumentException(Messages.getMessage("resourceNotAnnotated", "@javax.ws.rs.Path", resource)); //$NON-NLS-1$ //$NON-NLS-2$
>         }
>         String path = pathAnnotation.value();
>         logger.trace("path annotation value is {}", path); //$NON-NLS-1$
> @@ -627,7 +627,7 @@ public class UriBuilderImpl extends UriB
>         }
>         Path pathAnnotation = method.getAnnotation(Path.class);
>         if (pathAnnotation == null) {
> -            throw new IllegalArgumentException(Messages.getMessage("methodNotAnnotated", "Path")); //$NON-NLS-1$ //$NON-NLS-2$
> +            throw new IllegalArgumentException(Messages.getMessage("methodNotAnnotated", "@javax.ws.rs.Path", method)); //$NON-NLS-1$ //$NON-NLS-2$
>         }
>         String path = pathAnnotation.value();
>         logger.trace("path method annotation is {}", path); //$NON-NLS-1$
> @@ -655,14 +655,14 @@ public class UriBuilderImpl extends UriB
>                 if (pathAnnotation != null) {
>                     if (foundMethod != null) {
>                         throw new IllegalArgumentException(Messages
> -                            .getMessage("moreThanOneMethodAnnotated", "Path")); //$NON-NLS-1$ //$NON-NLS-2$
> +                            .getMessage("moreThanOneMethodAnnotated", "@javax.ws.rs.Path", method, resource)); //$NON-NLS-1$ //$NON-NLS-2$
>                     }
>                     foundMethod = m;
>                 }
>             }
>         }
>         if (foundMethod == null) {
> -            throw new IllegalArgumentException(Messages.getMessage("noMethodAnnotated", "Path")); //$NON-NLS-1$ //$NON-NLS-2$
> +            throw new IllegalArgumentException(Messages.getMessage("noMethodAnnotated", "@javax.ws.rs.Path", method, resource)); //$NON-NLS-1$ //$NON-NLS-2$
>         }
>         path(foundMethod);
>         logger.trace("path() exit"); //$NON-NLS-1$
> @@ -675,7 +675,7 @@ public class UriBuilderImpl extends UriB
>             logger.trace("port({}) entry", port); //$NON-NLS-1$
>         }
>         if (port < -1) {
> -            throw new IllegalArgumentException(Messages.getMessage("invalidPort")); //$NON-NLS-1$
> +            throw new IllegalArgumentException(Messages.getMessage("invalidPort", String.valueOf(port))); //$NON-NLS-1$
>         }
>         this.port = port;
>         logger.trace("port() exit"); //$NON-NLS-1$
> @@ -868,7 +868,7 @@ public class UriBuilderImpl extends UriB
>             uri = new URI(scheme, ssp, fragment);
>         } catch (URISyntaxException e) {
>             throw new IllegalArgumentException(Messages
> -                .getMessage("isInvalid", "schemeSpecificPart"), e); //$NON-NLS-1$ //$NON-NLS-2$
> +                .getMessage("isInvalid", "schemeSpecificPart", schemeSpecificPart), e); //$NON-NLS-1$ //$NON-NLS-2$
>         }
> 
>         resetSchemeSpecificPart();
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationFileLoader.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationFileLoader.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationFileLoader.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationFileLoader.java Mon Oct 25 16:32:45 2010
> @@ -146,8 +146,8 @@ public class ApplicationFileLoader {
>                         logger.trace("ClassNotFoundException while loading class", e); //$NON-NLS-1$
>                     }
>                 } catch (NoClassDefFoundError e) {
> -                    if (logger.isTraceEnabled()) {
> -                        logger.trace(Messages
> +                    if (logger.isErrorEnabled()) {
> +                        logger.error(Messages
>                             .getMessage("classInstantiationExceptionWithMsgFormat", line), e); //$NON-NLS-1$
>                     }
>                 }
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationValidator.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationValidator.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationValidator.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/application/ApplicationValidator.java Mon Oct 25 16:32:45 2010
> @@ -91,7 +91,7 @@ public class ApplicationValidator {
> 
>     /**
>      * Validates that class has only one of the following: Path, Provider,
> -     * DispatchedPath, DynamicResource
> +     * DynamicResource
>      * 
>      * @param cls
>      * @return
> @@ -112,9 +112,10 @@ public class ApplicationValidator {
>         if (!valid) {
>             if (logger.isWarnEnabled()) {
>                 logger.warn(Messages.getMessage("classNotValid", //$NON-NLS-1$
> -                                                cls.getName(), Path.class.getName(),
> -                                                    DynamicResource.class.getName(),
> -                                                    Provider.class.getName()));
> +                                                cls.getName(),
> +                                                Path.class.getName(),
> +                                                DynamicResource.class.getName(),
> +                                                Provider.class.getName()));
>             }
>         }
> 
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/CreationUtils.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/CreationUtils.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/CreationUtils.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/CreationUtils.java Mon Oct 25 16:32:45 2010
> @@ -38,8 +38,12 @@ import org.apache.wink.common.internal.r
> import org.apache.wink.common.internal.registry.InjectableFactory;
> import org.apache.wink.common.internal.registry.metadata.ClassMetadata;
> import org.apache.wink.common.internal.registry.metadata.ConstructorMetadata;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> 
> public class CreationUtils {
> +    
> +    private static final Logger logger = LoggerFactory.getLogger(CreationUtils.class);
> 
>     private CreationUtils() {
>     }
> @@ -79,12 +83,15 @@ public class CreationUtils {
>                                     ClassMetadata metadata,
>                                     RuntimeContext runtimeContext) throws IOException,
>         PrivilegedActionException {
> +        logger.trace("entry {} {} {}", new Object[]{object, metadata, runtimeContext});
> 
>         List<Injectable> injectableFields = metadata.getInjectableFields();
> +        logger.trace("injectableFields are {}", injectableFields);
>         for (Injectable injectableData : injectableFields) {
> 
>             Object value = injectableData.getValue(runtimeContext);
>             Member member = injectableData.getMember();
> +            logger.trace("Processing value {} and member {}", value, member);
>             if (member instanceof Field) {
>                 injectField(object, value, (Field)member);
>             } else if (member instanceof Method) {
> @@ -94,10 +101,12 @@ public class CreationUtils {
>                 throw new WebApplicationException();
>             }
>         }
> +        logger.trace("exit");
>     }
> 
>     static void invokeMethod(final Object object, final Object value, final Method method)
>         throws PrivilegedActionException {
> +        logger.trace("entry {} {} {}", new Object[]{object, value, method});
>         AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
> 
>             public Object run() throws Exception {
> @@ -109,7 +118,7 @@ public class CreationUtils {
>                 return null;
>             }
>         });
> -
> +        logger.trace("exit");
>     }
> 
>     static void injectField(final Object object, final Object value, final Field field)
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/LifecycleManagersRegistry.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/LifecycleManagersRegistry.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/LifecycleManagersRegistry.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/lifecycle/LifecycleManagersRegistry.java Mon Oct 25 16:32:45 2010
> @@ -19,7 +19,9 @@
>  *******************************************************************************/
> package org.apache.wink.common.internal.lifecycle;
> 
> +import java.util.Collections;
> import java.util.LinkedList;
> +import java.util.List;
> 
> /**
>  * Registry of LifecycleManagers
> @@ -82,4 +84,8 @@ public class LifecycleManagersRegistry {
> 
>         return defaultFactoryFactory.createObjectFactory(cls);
>     }
> +    
> +    public List<LifecycleManager<?>> getLifecycleManagers() {
> +        return Collections.unmodifiableList(this.store);
> +    }
> }
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java Mon Oct 25 16:32:45 2010
> @@ -115,13 +115,13 @@ public class AssetProvider implements Me
>         } catch (IllegalArgumentException e) {
>             if (logger.isErrorEnabled()) {
>                 logger.error(Messages
> -                    .getMessage("assetMethodInvokeError", method.getMethod().getName())); //$NON-NLS-1$
> +                    .getMessage("assetMethodInvokeError", method.getMethod().getName()), e); //$NON-NLS-1$
>             }
>             throw new WebApplicationException(e);
>         } catch (IllegalAccessException e) {
>             if (logger.isErrorEnabled()) {
>                 logger.error(Messages
> -                    .getMessage("assetMethodInvokeError", method.getMethod().getName())); //$NON-NLS-1$
> +                    .getMessage("assetMethodInvokeError", method.getMethod().getName()), e); //$NON-NLS-1$
>             }
>             throw new WebApplicationException(e);
>         } catch (InvocationTargetException e) {
> @@ -131,7 +131,7 @@ public class AssetProvider implements Me
>             }
>             if (logger.isErrorEnabled()) {
>                 logger.error(Messages
> -                    .getMessage("assetMethodInvokeError", method.getMethod().getName())); //$NON-NLS-1$
> +                    .getMessage("assetMethodInvokeError", method.getMethod().getName()), e); //$NON-NLS-1$
>             }
>             throw new WebApplicationException(targetException);
>         }
> @@ -179,19 +179,19 @@ public class AssetProvider implements Me
>             }
>             if (logger.isErrorEnabled()) {
>                 logger.error(Messages
> -                    .getMessage("assetMethodInvokeError", method.getMethod().getName())); //$NON-NLS-1$
> +                    .getMessage("assetMethodInvokeError", method.getMethod().getName()), e); //$NON-NLS-1$
>             }
>             throw new WebApplicationException(e);
>         } catch (InstantiationException e) {
>             if (logger.isErrorEnabled()) {
> -                logger.error(Messages.getMessage("assetMustHavePublicConstructor", type.getName())); //$NON-NLS-1$
> +                logger.error(Messages.getMessage("assetMustHavePublicConstructor", type.getName()), e); //$NON-NLS-1$
>             }
>             throw new WebApplicationException(e);
> 
>         } catch (Exception e) {
>             if (logger.isErrorEnabled()) {
>                 logger.error(Messages
> -                    .getMessage("assetMethodInvokeError", method.getMethod().getName())); //$NON-NLS-1$
> +                    .getMessage("assetMethodInvokeError", method.getMethod().getName()), e); //$NON-NLS-1$
>             }
>             throw new WebApplicationException(e);
>         }
> @@ -240,19 +240,19 @@ public class AssetProvider implements Me
>         // verify that the asset has a default public constructor
>         try {
>             if (assetType.getConstructor() == null) {
> -                if (logger.isInfoEnabled()) {
> -                    logger.info(Messages.getMessage("assetCannotInstantiate", assetType.getName())); //$NON-NLS-1$
> +                if (logger.isWarnEnabled()) {
> +                    logger.warn(Messages.getMessage("assetCannotInstantiate", assetType.getName())); //$NON-NLS-1$
>                 }
>                 return false;
>             }
>         } catch (SecurityException e) {
> -            if (logger.isInfoEnabled()) {
> -                logger.info(Messages.getMessage("assetCannotInstantiate", assetType.getName())); //$NON-NLS-1$
> +            if (logger.isWarnEnabled()) {
> +                logger.warn(Messages.getMessage("assetCannotInstantiate", assetType.getName()), e); //$NON-NLS-1$
>             }
>             return false;
>         } catch (NoSuchMethodException e) {
> -            if (logger.isInfoEnabled()) {
> -                logger.info(Messages.getMessage("assetCannotInstantiate", assetType.getName())); //$NON-NLS-1$
> +            if (logger.isWarnEnabled()) {
> +                logger.warn(Messages.getMessage("assetCannotInstantiate", assetType.getName()), e); //$NON-NLS-1$
>             }
>             return false;
>         }
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/FileProvider.java Mon Oct 25 16:32:45 2010
> @@ -84,7 +84,7 @@ public class FileProvider implements Mes
>                 public Object run() throws IOException {
>                     if (!t.canRead() || t.isDirectory()) {
>                         if(logger.isWarnEnabled()) {
> -                            logger.warn(Messages.getMessage("cannotUseFileAsResponse", //$NON-NLS-1$
> +                            logger.error(Messages.getMessage("cannotUseFileAsResponse", //$NON-NLS-1$
>                                                             t.getAbsoluteFile()));
>                         }
>                         throw new WebApplicationException();
> @@ -130,7 +130,7 @@ public class FileProvider implements Mes
>             if (!dir.exists() || !dir.isDirectory()) {
>                 dir = null;
>                 if (logger.isWarnEnabled()) {
> -                    logger.warn(Messages.getMessage("uploadDirDoesNotExist", uploadDir)); //$NON-NLS-1$
> +                    logger.error(Messages.getMessage("uploadDirDoesNotExist", uploadDir)); //$NON-NLS-1$
>                 }
>                 throw new WebApplicationException();
> 
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java Mon Oct 25 16:32:45 2010
> @@ -57,11 +57,13 @@ public class JAXBArrayJSONProvider exten
> 
>     protected volatile MessageBodyReader<Object> readerProvider = null;
>     protected volatile MessageBodyWriter<Object> writerProvider = null;
> -    
> -    private static final Logger logger = LoggerFactory.getLogger(JAXBArrayJSONProvider.class);
> +
> +    private static final Logger                  logger         =
> +                                                                    LoggerFactory
> +                                                                        .getLogger(JAXBArrayJSONProvider.class);
> 
>     @Context
> -    Providers                           injectedProviders;
> +    Providers                                    injectedProviders;
> 
>     public boolean isReadable(Class<?> type,
>                               Type genericType,
> @@ -96,7 +98,10 @@ public class JAXBArrayJSONProvider exten
>                                                        theType,
>                                                        annotations,
>                                                        mediaType);
> -            logger.trace("readerProvider was {} of type {}", System.identityHashCode(readerProvider), readerProvider.getClass().getName()); //$NON-NLS-1$
> +            if (logger.isTraceEnabled()) {
> +                logger
> +                    .trace("readerProvider was {} of type {}", System.identityHashCode(readerProvider), readerProvider.getClass().getName()); //$NON-NLS-1$
> +            }
>         }
>         Queue<String> queue = new LinkedList<String>();
>         List<Object> collection = new ArrayList<Object>();
> @@ -167,7 +172,10 @@ public class JAXBArrayJSONProvider exten
>                                                        theType,
>                                                        annotations,
>                                                        mediaType);
> -            logger.trace("writerProvider was {} of type {}", System.identityHashCode(writerProvider), writerProvider.getClass().getName()); //$NON-NLS-1$
> +            if (logger.isTraceEnabled()) {
> +                logger
> +                    .trace("writerProvider was {} of type {}", System.identityHashCode(writerProvider), writerProvider.getClass().getName()); //$NON-NLS-1$
> +            }
>         }
>         entityStream.write("[".getBytes()); //$NON-NLS-1$
>         int i = 0;
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java Mon Oct 25 16:32:45 2010
> @@ -64,6 +64,7 @@ import org.apache.wink.common.internal.u
> import org.apache.wink.common.model.JAXBUnmarshalOptions;
> import org.apache.wink.common.model.XmlFormattingOptions;
> import org.apache.wink.common.utils.ProviderUtils;
> +import org.apache.wink.common.utils.ProviderUtils.PROVIDER_EXCEPTION_ORIGINATOR;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> 
> @@ -106,16 +107,18 @@ public abstract class AbstractJAXBProvid
>     // of which is unique per class object being (un)marshalled. In Axis2, the
>     // JAXBContext instances cover the entire application space, thus
>     // it was safe to cache them in a static field.
> -    private Pool<JAXBContext, Marshaller>                         mpool                     =
> -                                                                                                new Pool<JAXBContext, Marshaller>();
> -    private Pool<JAXBContext, Unmarshaller>                       upool                     =
> -                                                                                                new Pool<JAXBContext, Unmarshaller>();
> -                                                                                                
> -
> -    // For performance, it might seem advantageous to use a static XMLInputFactory instance.  However, this was shown to
> -    // be problematic on the Sun StAX parser (which is a fork of Apache Xerces) under load stress test.  So we use ThreadLocal.
> -    private static ThreadLocal<XMLInputFactory> xmlInputFactory = new ThreadLocal<XMLInputFactory>();
> -    
> +    private Pool<JAXBContext, Marshaller>                            mpool                          =
> +                                                                                                        new Pool<JAXBContext, Marshaller>();
> +    private Pool<JAXBContext, Unmarshaller>                          upool                          =
> +                                                                                                        new Pool<JAXBContext, Unmarshaller>();
> +
> +    // For performance, it might seem advantageous to use a static
> +    // XMLInputFactory instance. However, this was shown to
> +    // be problematic on the Sun StAX parser (which is a fork of Apache Xerces)
> +    // under load stress test. So we use ThreadLocal.
> +    private static ThreadLocal<XMLInputFactory>                      xmlInputFactory                =
> +                                                                                                        new ThreadLocal<XMLInputFactory>();
> +
>     /**
>      * This class is the key to the JAXBContext cache. It must be based on the
>      * ContextResolver instance who created the JAXBContext and the type passed
> @@ -124,8 +127,10 @@ public abstract class AbstractJAXBProvid
>      * creates contexts between noon and 5:00pm. So, uhhh, don't do that.
>      */
>     private static class JAXBContextResolverKey {
> -        private static final Logger logger = LoggerFactory.getLogger(JAXBContextResolverKey.class);
> -        
> +        private static final Logger            logger   =
> +                                                            LoggerFactory
> +                                                                .getLogger(JAXBContextResolverKey.class);
> +
>         protected ContextResolver<JAXBContext> _resolver;
>         protected Type                         _type;
>         private int                            hashCode = -1;
> @@ -151,7 +156,8 @@ public abstract class AbstractJAXBProvid
>                 ((obj._resolver == null) && (_resolver == null)) || ((obj._resolver != null) && (_resolver != null));
>             logger.trace("null check result is {}", result); //$NON-NLS-1$
>             // we can use hashCode() to compare _resolver
> -            boolean finalResult = result && (obj.hashCode() == hashCode()) && (obj._type.equals(_type));
> +            boolean finalResult =
> +                result && (obj.hashCode() == hashCode()) && (obj._type.equals(_type));
>             logger.trace("final result is {}", finalResult); //$NON-NLS-1$
>             return finalResult;
>         }
> @@ -209,11 +215,11 @@ public abstract class AbstractJAXBProvid
>     // JAXBContext cache can be turned off through system property
>     static private final String                                          propVal          =
>                                                                                               System
> -                                                                                                  .getProperty("org.apache.wink.jaxbcontextcache"); //$NON-NLS-1$
> +                                                                                                  .getProperty("org.apache.wink.jaxbcontextcache");        //$NON-NLS-1$
>     // non-final, protected only to make it unittestable
>     static protected boolean                                             contextCacheOn   =
>                                                                                               !((propVal != null) && (propVal
> -                                                                                                  .equalsIgnoreCase("off"))); //$NON-NLS-1$
> +                                                                                                  .equalsIgnoreCase("off")));                              //$NON-NLS-1$
> 
> /**
>      * Get the unmarshaller. You must call {@link #releaseJAXBUnmarshaller(JAXBContext, Unmarshaller) to put it back
> @@ -252,14 +258,14 @@ public abstract class AbstractJAXBProvid
> 
>         return unm;
>     }
> -    
> +
>     /**
>      * skips START_DOCUMENT, COMMENTs, PIs, and checks for DTD
> +     * 
>      * @param reader
>      * @throws XMLStreamException
>      */
> -    private static void checkForDTD(XMLStreamReader reader)
> -            throws XMLStreamException {
> +    private static void checkForDTD(XMLStreamReader reader) throws XMLStreamException {
>         boolean supportDTD = false;
> 
>         int event = reader.getEventType();
> @@ -268,7 +274,11 @@ public abstract class AbstractJAXBProvid
>             // already been partially processed
>             throw new XMLStreamException(Messages.getMessage("badXMLReaderInitialStart")); //$NON-NLS-1$
>         }
> -        while (event != XMLStreamReader.START_ELEMENT) {  // all StAX parsers require a START_ELEMENT.  See AbstractJAXBProviderTest class
> +        while (event != XMLStreamReader.START_ELEMENT) { // all StAX parsers
> +                                                         // require a
> +                                                         // START_ELEMENT. See
> +                                                         // AbstractJAXBProviderTest
> +                                                         // class
>             event = reader.next();
>             if (event == XMLStreamReader.DTD) {
> 
> @@ -278,18 +288,21 @@ public abstract class AbstractJAXBProvid
>                     Properties props = winkConfig.getProperties();
>                     if (props != null) {
>                         // use valueOf method to require the word "true"
> -                        supportDTD = Boolean.valueOf(props.getProperty("wink.supportDTDEntityExpansion")); //$NON-NLS-1$
> +                        supportDTD =
> +                            Boolean.valueOf(props.getProperty("wink.supportDTDEntityExpansion")); //$NON-NLS-1$
>                     }
>                 }
>                 if (!supportDTD) {
> -                    throw new EntityReferenceXMLStreamException(Messages.getMessage("entityRefsNotSupported")); //$NON-NLS-1$
> +                    throw new EntityReferenceXMLStreamException(Messages
> +                        .getMessage("entityRefsNotSupported")); //$NON-NLS-1$
>                 } else {
> -                    logger.trace("DTD entity reference expansion is enabled.  This may present a security risk."); //$NON-NLS-1$
> +                    logger
> +                        .trace("DTD entity reference expansion is enabled.  This may present a security risk."); //$NON-NLS-1$
>                 }
>             }
>         }
>     }
> -    
> +
>     private static XMLInputFactory getXMLInputFactory() {
>         XMLInputFactory factory = xmlInputFactory.get();
>         if (factory == null) {
> @@ -298,7 +311,7 @@ public abstract class AbstractJAXBProvid
>         }
>         return factory;
>     }
> -    
> +
>     /**
>      * A consistent place to get a properly configured XMLStreamReader.
>      * 
> @@ -306,15 +319,18 @@ public abstract class AbstractJAXBProvid
>      * @return
>      * @throws XMLStreamException
>      */
> -    protected static XMLStreamReader getXMLStreamReader(InputStream entityStream) throws XMLStreamException  {
> -        // NOTE: createFilteredReader may appear to be more convenient, but it comes at the cost of
> -        // performance.  This solution (to use checkForDTD) appears to be the best solution to preserve
> +    protected static XMLStreamReader getXMLStreamReader(InputStream entityStream)
> +        throws XMLStreamException {
> +        // NOTE: createFilteredReader may appear to be more convenient, but it
> +        // comes at the cost of
> +        // performance. This solution (to use checkForDTD) appears to be the
> +        // best solution to preserve
>         // performance, but still achieve what we need to do.
>         XMLStreamReader reader = getXMLInputFactory().createXMLStreamReader(entityStream);
>         checkForDTD(reader);
>         return reader;
>     }
> -    
> +
>     /**
>      * A consistent place to get a properly configured XMLStreamReader.
>      * 
> @@ -322,15 +338,18 @@ public abstract class AbstractJAXBProvid
>      * @return
>      * @throws XMLStreamException
>      */
> -    protected static XMLStreamReader getXMLStreamReader(InputStreamReader entityStreamReader) throws XMLStreamException  {
> -        // NOTE: createFilteredReader may appear to be more convenient, but it comes at the cost of
> -        // performance.  This solution (to use checkForDTD) appears to be the best solution to preserve
> +    protected static XMLStreamReader getXMLStreamReader(InputStreamReader entityStreamReader)
> +        throws XMLStreamException {
> +        // NOTE: createFilteredReader may appear to be more convenient, but it
> +        // comes at the cost of
> +        // performance. This solution (to use checkForDTD) appears to be the
> +        // best solution to preserve
>         // performance, but still achieve what we need to do.
>         XMLStreamReader reader = getXMLInputFactory().createXMLStreamReader(entityStreamReader);
>         checkForDTD(reader);
>         return reader;
>     }
> -    
> +
>     protected static void closeXMLStreamReader(XMLStreamReader xmlStreamReader) {
>         if (xmlStreamReader != null) {
>             try {
> @@ -481,7 +500,7 @@ public abstract class AbstractJAXBProvid
>         }
>         return type;
>     }
> -    
> +
> 
>     public Class<?> getConcreteTypeFromTypeMap(Class<?> type, Annotation[] annotations) {
>         Class<?> concreteType = jaxbTypeMapCache.get(type);
> @@ -491,21 +510,21 @@ public abstract class AbstractJAXBProvid
>         }
>         return concreteType;
>     }
> -    
> +
>     @SuppressWarnings("unchecked")
>     protected Object marshalWithXmlAdapter(Object obj, Type type, Annotation[] annotations) {
>         if ((type == null) || (annotations == null)) {
>             return obj;
>         }
> -        XmlJavaTypeAdapter xmlJavaTypeAdapter = getXmlJavaTypeAdapter(type,
> -                annotations);
> +        XmlJavaTypeAdapter xmlJavaTypeAdapter = getXmlJavaTypeAdapter(type, annotations);
>         if (xmlJavaTypeAdapter != null) {
>             try {
>                 XmlAdapter xmlAdapter = xmlJavaTypeAdapter.value().newInstance();
>                 return xmlAdapter.marshal(obj);
>             } catch (Exception e) {
>                 if (logger.isDebugEnabled()) {
> -                    logger.debug("Could not marshal {} using {} due to exception:", new Object[]{obj, xmlJavaTypeAdapter.value().getName(), e});
> +                    logger.debug("Could not marshal {} using {} due to exception:", new Object[] {
> +                        obj, xmlJavaTypeAdapter.value().getName(), e});
>                 }
>             }
>         }
> @@ -545,28 +564,27 @@ public abstract class AbstractJAXBProvid
>         }
>         return xmlJavaTypeAdapter;
>     }
> -    
> -    
> +
>     @SuppressWarnings("unchecked")
>     protected Object unmarshalWithXmlAdapter(Object obj, Type type, Annotation[] annotations) {
>         if ((type == null) || (annotations == null)) {
>             return obj;
>         }
> -        XmlJavaTypeAdapter xmlJavaTypeAdapter = getXmlJavaTypeAdapter(type,
> -                annotations);
> +        XmlJavaTypeAdapter xmlJavaTypeAdapter = getXmlJavaTypeAdapter(type, annotations);
>         if (xmlJavaTypeAdapter != null) {
>             try {
>                 XmlAdapter xmlAdapter = xmlJavaTypeAdapter.value().newInstance();
>                 return xmlAdapter.unmarshal(obj);
>             } catch (Exception e) {
>                 if (logger.isDebugEnabled()) {
> -                    logger.debug("Could not unmarshal {} using {} due to exception:", new Object[]{obj, xmlJavaTypeAdapter.value().getName(), e});
> +                    logger.debug("Could not unmarshal {} using {} due to exception:", new Object[] {
> +                        obj, xmlJavaTypeAdapter.value().getName(), e});
>                 }
>             }
>         }
>         return obj;
>     }
> -    
> +
>     public static boolean isJAXBObject(Class<?> type) {
>         return isXMLRootElement(type) || isXMLType(type);
>     }
> @@ -637,7 +655,15 @@ public abstract class AbstractJAXBProvid
>         }
> 
>         if (contextResolver != null) {
> -            context = contextResolver.getContext(type);
> +            try {
> +                context = contextResolver.getContext(type);
> +            } catch (RuntimeException e) {
> +                ProviderUtils.logUserProviderException(e,
> +                                                       contextResolver,
> +                                                       PROVIDER_EXCEPTION_ORIGINATOR.getContext,
> +                                                       new Object[] {type},
> +                                                       RuntimeContextTLS.getRuntimeContext());
> +            }
>         }
> 
>         if (context == null) {
> @@ -657,7 +683,8 @@ public abstract class AbstractJAXBProvid
>         return context;
>     }
> 
> -    private JAXBContext getDefaultContext(final Class<?> type, final Type genericType) throws JAXBException {
> +    private JAXBContext getDefaultContext(final Class<?> type, final Type genericType)
> +        throws JAXBException {
>         logger.trace("getDefaultContext({}, {}) entry", type, genericType); //$NON-NLS-1$
>         try {
>             return AccessController.doPrivileged(new PrivilegedExceptionAction<JAXBContext>() {
> @@ -693,9 +720,9 @@ public abstract class AbstractJAXBProvid
>                     }
>                     return context;
>                 }
> -                
> +
>             });
> -        } catch(PrivilegedActionException e) {
> +        } catch (PrivilegedActionException e) {
>             throw (JAXBException)e.getException();
>         }
>     }
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBXmlProvider.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBXmlProvider.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBXmlProvider.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBXmlProvider.java Mon Oct 25 16:32:45 2010
> @@ -180,7 +180,9 @@ public class JAXBXmlProvider extends Abs
>         try {
>             if (isJAXBObject(concreteType)) {
>                 JAXBContext context = getContext(concreteType, genericType, mediaType);
> -                logger.trace("using context {}@{} to get marshaller", context.getClass().getName(), System.identityHashCode(context)); //$NON-NLS-1$
> +                if(logger.isTraceEnabled()) {
> +                    logger.trace("using context {}@{} to get marshaller", context.getClass().getName(), System.identityHashCode(context)); //$NON-NLS-1$
> +                }
>                 Marshaller marshaller = getJAXBMarshaller(concreteType, context, mediaType);
>                 Object entityToMarshal = getEntityToMarshal(t, concreteType);
> 
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java Mon Oct 25 16:32:45 2010
> @@ -29,8 +29,13 @@ import java.util.Set;
> 
> import javax.ws.rs.core.MediaType;
> 
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> public abstract class AbstractMetadata {
> 
> +    private static final Logger logger            = LoggerFactory.getLogger(AbstractMetadata.class);
> +
>     private List<String>   paths;
>     private Set<MediaType> consumes;
>     private Set<MediaType> produces;
> @@ -46,26 +51,38 @@ public abstract class AbstractMetadata {
>     }
> 
>     public String getPath() {
> +        logger.trace("getPath() entry");
>         if (paths.size() == 0) {
> +            logger.trace("getPath() exit returning null");
>             return null;
>         }
> -        return paths.get(0);
> +        String p = paths.get(0);
> +        logger.trace("getPath() exit returning {}", p);
> +        return p;
>     }
> 
>     public void addPath(String path) {
> +        logger.trace("addPath({}) entry", path);
>         paths.add(path);
> +        logger.trace("addPath() exit");
>     }
> 
>     public void addPaths(Collection<String> paths) {
> +        logger.trace("addPath({}) entry", paths);
>         this.paths.addAll(paths);
> +        logger.trace("addPath() exit", paths);
>     }
> 
>     public void addConsumes(MediaType mt) {
> +        logger.trace("addConsumes({}) entry", mt);
>         consumes.add(mt);
> +        logger.trace("addConsumes() exit");
>     }
> 
>     public void addProduces(MediaType mt) {
> +        logger.trace("addProduces({}) entry", mt);
>         produces.add(mt);
> +        logger.trace("addProduces() exit");
>     }
> 
>     public List<String> getPaths() {
> @@ -89,7 +106,9 @@ public abstract class AbstractMetadata {
>     }
> 
>     public void setEncoded(boolean encoded) {
> +        logger.trace("setEncoded({}) entry", encoded);
>         this.encoded = encoded;
> +        logger.trace("setEncoded({}) exit", encoded);
>     }
> 
>     public boolean isEncoded() {
> @@ -101,6 +120,8 @@ public abstract class AbstractMetadata {
>     }
> 
>     public void setDefaultValue(String defaultValue) {
> +        logger.trace("setDefaultValue({}) entry", defaultValue);
>         this.defaultValue = defaultValue;
> +        logger.trace("setDefaultValue() exit");        
>     }
> }
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java Mon Oct 25 16:32:45 2010
> @@ -43,8 +43,8 @@ import org.slf4j.LoggerFactory;
>  */
> public abstract class AbstractMetadataCollector {
> 
> -    private static final Logger logger = LoggerFactory.getLogger(AbstractMetadataCollector.class);
> -    
> +    private static final Logger logger = LoggerFactory.getLogger(AbstractMetadataCollector.class); 
> +
>     private final ClassMetadata metadata;
> 
>     public AbstractMetadataCollector(Class<?> clazz) {
> @@ -59,10 +59,13 @@ public abstract class AbstractMetadataCo
>      * constructor only, when you override parseField() and set it to be final.
>      */
>     protected final void parseFields() {
> +        logger.trace("parseFields() entry");
>         Class<?> resourceClass = metadata.getResourceClass();
> +        logger.trace("Class is {}", resourceClass);
> 
>         List<Injectable> injectableFields = metadata.getInjectableFields();
> -        
> +        logger.trace("Injectable fields: {}", injectableFields);
> +
>         // add fields
>         while (resourceClass != Object.class && resourceClass != null) {
>             for (Field field : resourceClass.getDeclaredFields()) {
> @@ -103,6 +106,7 @@ public abstract class AbstractMetadataCo
>                 }
>             }
>         }
> +        logger.trace("parseFields() exit");
>     }
> 
>     protected abstract Injectable parseAccessibleObject(AccessibleObject field, Type fieldType);
> @@ -118,13 +122,16 @@ public abstract class AbstractMetadataCo
>      * isConstructorParameterValid() and set it to be final.
>      */
>     protected final void parseConstructors() {
> +        logger.trace("parseConstructors() entry");
>         ConstructorMetadata constructorMetadata = new ConstructorMetadata();
>         List<Injectable> formalParameters = new ArrayList<Injectable>();
>         Class<?> resourceClass = metadata.getResourceClass();
> 
>         L1: for (Constructor<?> constructor : resourceClass.getDeclaredConstructors()) {
> +            logger.trace("Constructor is {}", constructor);
>             int modifiers = constructor.getModifiers();
>             if (!Modifier.isPublic(modifiers)) {
> +                logger.trace("Constructor is skipped because not public");
>                 continue;
>             }
> 
> @@ -174,14 +181,19 @@ public abstract class AbstractMetadataCo
>             }
>         }
> 
> +        logger.trace("Set constructor to {}", constructorMetadata);
>         metadata.setConstructor(constructorMetadata);
> +        logger.trace("parseConstructors() exit");
>     }
> 
>     protected void parseEncoded(Class<?> cls) {
> +        logger.trace("parseEncoded({}) entry", cls);
>         Encoded encoded = cls.getAnnotation(Encoded.class);
>         if (encoded != null) {
>             metadata.setEncoded(true);
> +            logger.trace("parseEncoded() setEncoded to true");
>         }
> +        logger.trace("parseEncoded() exit");
>     }
> 
>     public ClassMetadata getMetadata() {
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ApplicationMetadataCollector.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ApplicationMetadataCollector.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ApplicationMetadataCollector.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ApplicationMetadataCollector.java Mon Oct 25 16:32:45 2010
> @@ -31,50 +31,66 @@ import org.apache.wink.common.internal.r
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> 
> -
> /**
>  * Collects ClassMetadata from JAX-RS Application classes
>  */
> public class ApplicationMetadataCollector extends AbstractMetadataCollector {
> 
> -    private static final Logger logger = LoggerFactory.getLogger(ApplicationMetadataCollector.class);
> +    private static final Logger logger =
> +                                           LoggerFactory
> +                                               .getLogger(ApplicationMetadataCollector.class);
> 
>     private ApplicationMetadataCollector(Class<?> clazz) {
>         super(clazz);
>     }
> 
>     public static ClassMetadata collectMetadata(Class<?> clazz) {
> +        logger.trace("collectMetadata({})", clazz);
>         ApplicationMetadataCollector collector = new ApplicationMetadataCollector(clazz);
>         collector.parseFields();
>         collector.parseConstructors();
> -        return collector.getMetadata();
> +        ClassMetadata md = collector.getMetadata();
> +        logger.trace("collectMetadata() exit returning {}", md);
> +        return md;
>     }
> 
>     @Override
>     protected final Injectable parseAccessibleObject(AccessibleObject field, Type fieldType) {
> +        logger.trace("parseAccessibleObject({}, {})", field, fieldType);
>         Injectable injectable =
>             InjectableFactory.getInstance().create(fieldType,
>                                                    field.getAnnotations(),
>                                                    (Member)field,
>                                                    getMetadata().isEncoded(),
>                                                    null);
> +        logger.trace("Injectable is {}", injectable);
>         if (injectable.getParamType() == Injectable.ParamType.ENTITY) {
>             // EntityParam should be ignored for fields (see JSR-311 3.2)
> +            logger.trace("parseAccessibleObject() returning null");
>             return null;
>         }
> +        logger.trace("parseAccessibleObject() returning {}", injectable);
>         return injectable;
>     }
> 
>     @Override
>     protected final boolean isConstructorParameterValid(Injectable fp) {
> +        logger.trace("isConstructorParameterValid({}) entry", fp);
>         // This method is declared as final, since parseConstructors(), which
>         // calls it, is invoked from the constructor
> -        return !(fp.getParamType() == Injectable.ParamType.ENTITY);
> +        boolean ret = !(fp.getParamType() == Injectable.ParamType.ENTITY);
> +        if (logger.isTraceEnabled()) {
> +            logger.trace("isConstructorParameterValid() exit returning {}", ret);
> +        }
> +        return ret;
>     }
> -    
> +
>     @SuppressWarnings("unchecked")
>     public static boolean isApplication(Class cls) {
> -        return Application.class.isAssignableFrom(cls);
> +        logger.trace("isApplication({}) entry", cls);
> +        boolean ret = Application.class.isAssignableFrom(cls);
> +        logger.trace("isApplication() exit returning {}", ret);
> +        return ret;
>     }
> 
> }
> \ No newline at end of file
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ConstructorMetadata.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ConstructorMetadata.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ConstructorMetadata.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ConstructorMetadata.java Mon Oct 25 16:32:45 2010
> @@ -25,8 +25,12 @@ import java.util.ArrayList;
> import java.util.List;
> 
> import org.apache.wink.common.internal.registry.Injectable;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> 
> public class ConstructorMetadata {
> +    
> +    private static Logger logger = LoggerFactory.getLogger(ConstructorMetadata.class);
> 
>     private Constructor<?>         constructor;
>     private final List<Injectable> formalParameters;
> @@ -42,7 +46,9 @@ public class ConstructorMetadata {
>     }
> 
>     public void setConstructor(Constructor<?> constructor) {
> +        logger.trace("setConstructor({}) entry", constructor);
>         this.constructor = constructor;
> +        logger.trace("setConstructor() exit");
>     }
> 
>     public List<Injectable> getFormalParameters() {
> @@ -50,7 +56,9 @@ public class ConstructorMetadata {
>     }
> 
>     public void setEncoded(boolean encoded) {
> +        logger.trace("setEncoded({}) entry", encoded);
>         this.encoded = encoded;
> +        logger.trace("setEncoded() exit");
>     }
> 
>     public boolean isEncoded() {
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/MethodMetadata.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/MethodMetadata.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/MethodMetadata.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/MethodMetadata.java Mon Oct 25 16:32:45 2010
> @@ -70,7 +70,7 @@ public class MethodMetadata extends Abst
>     public List<Injectable> getFormalParameters() {
>         return formalParameters;
>     }
> -    
> +
>     @Override
>     public Set<MediaType> getConsumes() {
>         Set<MediaType> set = super.getConsumes();
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ProviderMetadataCollector.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ProviderMetadataCollector.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ProviderMetadataCollector.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ProviderMetadataCollector.java Mon Oct 25 16:32:45 2010
> @@ -43,6 +43,7 @@ public class ProviderMetadataCollector e
>     }
> 
>     public static boolean isProvider(Class<?> cls) {
> +        logger.trace("isProvider({}) entry", cls);
>         /*
>          * look for the Provider annotation on super classes (even though
>          * @Provider does not have @java.lang.annotation.Inherited) in order to
> @@ -50,6 +51,7 @@ public class ProviderMetadataCollector e
>          */
>         // return cls.getAnnotation(Provider.class) != null;
>         if (cls == Object.class) {
> +            logger.trace("isProvider() exit returning false");
>             return false;
>         }
> 
> @@ -57,6 +59,7 @@ public class ProviderMetadataCollector e
>             if (logger.isWarnEnabled()) {
>                 logger.warn(Messages.getMessage("providerIsInterfaceOrAbstract", cls)); //$NON-NLS-1$
>             }
> +            logger.trace("isProvider() exit returning false");
>             return false;
>         }
> 
> @@ -71,8 +74,9 @@ public class ProviderMetadataCollector e
>             Class<?> superclass = declaringClass.getSuperclass();
>             if (superclass != null && superclass.getAnnotation(Provider.class) != null) {
>                 if (logger.isWarnEnabled()) {
> -                    logger.warn(Messages.getMessage("providerShouldBeAnnotatedDirectly", cls)); //$NON-NLS-1$
> +                    logger.warn(Messages.getMessage("providerShouldBeAnnotatedDirectly", cls, superclass)); //$NON-NLS-1$
>                 }
> +                logger.trace("isProvider({}) exit returning true", superclass);
>                 return true;
>             }
> 
> @@ -81,22 +85,27 @@ public class ProviderMetadataCollector e
>             for (Class<?> interfaceClass : interfaces) {
>                 if (interfaceClass.getAnnotation(Provider.class) != null) {
>                     if (logger.isWarnEnabled()) {
> -                        logger.warn(Messages.getMessage("providerShouldBeAnnotatedDirectly", cls)); //$NON-NLS-1$
> +                        logger.warn(Messages.getMessage("providerShouldBeAnnotatedDirectly", cls, interfaceClass)); //$NON-NLS-1$
>                     }
> +                    logger.trace("isProvider({}) exit returning true", interfaceClass);
>                     return true;
>                 }
>             }
>             declaringClass = declaringClass.getSuperclass();
>         }
> -
> +        logger.trace("isProvider() exit returning false");
>         return false;
>     }
> 
>     public static ClassMetadata collectMetadata(Class<?> clazz) {
> +        logger.trace("collectMetadata({})", clazz);
>         ProviderMetadataCollector collector = new ProviderMetadataCollector(clazz);
>         collector.parseConstructors();
>         collector.parseFields();
> -        return collector.getMetadata();
> +        
> +        ClassMetadata md = collector.getMetadata();
> +        logger.trace("collectMetadata() exit returning {}", md);
> +        return md;
>     }
> 
>     @Override
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java Mon Oct 25 16:32:45 2010
> @@ -66,10 +66,13 @@ public class ResourceMetadataCollector e
> 
>     public static boolean isStaticResource(Class<?> cls) {
>         if (Modifier.isInterface(cls.getModifiers()) || Modifier.isAbstract(cls.getModifiers())) {
> +            logger.trace("isStaticResource() exit returning false because interface or abstract");
> +
>             return false;
>         }
> 
>         if (cls.getAnnotation(Path.class) != null) {
> +            logger.trace("isStaticResource() exit returning true");
>             return true;
>         }
> 
> @@ -80,8 +83,11 @@ public class ResourceMetadataCollector e
>             Class<?> superclass = declaringClass.getSuperclass();
>             if (superclass.getAnnotation(Path.class) != null) {
>                 if (logger.isWarnEnabled()) {
> -                    logger.warn(Messages.getMessage("rootResourceShouldBeAnnotatedDirectly", cls)); //$NON-NLS-1$
> +                    logger.warn(Messages
> +                        .getMessage("rootResourceShouldBeAnnotatedDirectly", cls, superclass)); //$NON-NLS-1$
>                 }
> +                logger.trace("isStaticResource() exit returning true because {} has @Path",
> +                             superclass);
>                 return true;
>             }
> 
> @@ -91,13 +97,17 @@ public class ResourceMetadataCollector e
>                 if (interfaceClass.getAnnotation(Path.class) != null) {
>                     if (logger.isWarnEnabled()) {
>                         logger.warn(Messages.getMessage("rootResourceShouldBeAnnotatedDirectly", //$NON-NLS-1$
> -                                                        cls));
> +                                                        cls,
> +                                                        interfaceClass));
>                     }
> +                    logger.trace("isStaticResource() exit returning true because {} has @Path",
> +                                 interfaceClass);
>                     return true;
>                 }
>             }
>             declaringClass = declaringClass.getSuperclass();
>         }
> +        logger.trace("isStaticResource() exit returning false");
>         return false;
>     }
> 
> @@ -106,12 +116,15 @@ public class ResourceMetadataCollector e
>     }
> 
>     public static ClassMetadata collectMetadata(Class<?> clazz) {
> +        logger.trace("collectMetadata({}) entry", clazz);
>         ResourceMetadataCollector collector = new ResourceMetadataCollector(clazz);
>         collector.parseClass();
>         collector.parseFields();
>         collector.parseConstructors();
>         collector.parseMethods();
> -        return collector.getMetadata();
> +        ClassMetadata md = collector.getMetadata();
> +        logger.trace("collectMetadata() exit returning {}", md);
> +        return md;
>     }
> 
>     @Override
> @@ -135,7 +148,7 @@ public class ResourceMetadataCollector e
>     }
> 
>     private boolean parseClass(Class<?> cls) {
> -
> +        logger.trace("parseClass({})", cls);
>         boolean workspacePresent = parseWorkspace(cls);
>         boolean pathPresent = parsePath(cls);
>         boolean consumesPresent = parseClassConsumes(cls);
> @@ -171,6 +184,7 @@ public class ResourceMetadataCollector e
>         Path path = cls.getAnnotation(Path.class);
>         if (path != null) {
>             getMetadata().addPath(path.value());
> +            logger.trace("parseClass() returning true for class direct");
>             return true;
>         }
> 
> @@ -182,6 +196,7 @@ public class ResourceMetadataCollector e
>             path = superclass.getAnnotation(Path.class);
>             if (path != null) {
>                 getMetadata().addPath(path.value());
> +                logger.trace("parseClass() returning true for superclass {}", superclass);
>                 return true;
>             }
> 
> @@ -191,31 +206,37 @@ public class ResourceMetadataCollector e
>                 path = interfaceClass.getAnnotation(Path.class);
>                 if (path != null) {
>                     getMetadata().addPath(path.value());
> +                    logger.trace("parseClass() returning true for interface {}", interfaceClass);
>                     return true;
>                 }
>             }
>             declaringClass = declaringClass.getSuperclass();
>         }
> -
> +        logger.trace("parseClass() returning false");
>         return false;
>     }
> 
>     private void parseMethods() {
> +        logger.trace("entry");
>         F1: for (Method method : getMetadata().getResourceClass().getMethods()) {
>             Class<?> declaringClass = method.getDeclaringClass();
>             if (declaringClass == Object.class) {
>                 continue F1;
>             }
>             MethodMetadata methodMetadata = createMethodMetadata(method);
> +            logger.trace("Found methodMetadata {} for method {}", methodMetadata, method);
> +
>             if (methodMetadata != null) {
>                 String path = methodMetadata.getPath();
>                 String httpMethod = methodMetadata.getHttpMethod();
>                 if (path != null) {
>                     // sub-resource
>                     if (httpMethod != null) {
> +                        logger.trace("Was subresource method");
>                         // sub-resource method
>                         getMetadata().getSubResourceMethods().add(methodMetadata);
>                     } else {
> +                        logger.trace("Was subresource locator");
>                         // sub-resource locator
>                         // verify that the method does not take an entity
>                         // parameter
> @@ -244,15 +265,17 @@ public class ResourceMetadataCollector e
>                         getMetadata().getSubResourceLocators().add(methodMetadata);
>                     }
>                 } else {
> +                    logger.trace("Was resource method");
>                     // resource method
>                     getMetadata().getResourceMethods().add(methodMetadata);
>                 }
>             }
>         }
> +        logger.trace("exit");
>     }
> 
>     private MethodMetadata createMethodMetadata(Method method) {
> -
> +        logger.trace("createMethodMetadata({})", method);
>         int modifiers = method.getModifiers();
>         // only public, non-static methods
>         if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
> @@ -306,7 +329,8 @@ public class ResourceMetadataCollector e
>         // but keep the method params as the super may have declared a generic
>         // type param
>         if (!hasAnnotation) {
> -
> +            logger
> +                .trace("Method did not directly have annotation so going up the class hierarchy chain");
>             Class<?> declaringClass = method.getDeclaringClass();
> 
>             // try a superclass
> @@ -316,6 +340,9 @@ public class ResourceMetadataCollector e
>                 // stop with if the method found
>                 if (createdMetadata != null) {
>                     mergeFormalParameterMetadata(createdMetadata, method);
> +                    logger.trace("createMethodMetadata() exit returning {} from superclass {}",
> +                                 createdMetadata,
> +                                 superclass);
>                     return createdMetadata;
>                 }
>             }
> @@ -327,11 +354,15 @@ public class ResourceMetadataCollector e
>                 // stop with the first method found
>                 if (createdMetadata != null) {
>                     mergeFormalParameterMetadata(createdMetadata, method);
> +                    logger.trace("createMethodMetadata() exit returning {} from interface {}",
> +                                 createdMetadata,
> +                                 interfaceClass);
>                     return createdMetadata;
>                 }
>             }
> 
>             // annotations are not inherited. ignore this method.
> +            logger.trace("createdMethodMetadata() returning null");
>             return null;
>         }
> 
> @@ -342,6 +373,7 @@ public class ResourceMetadataCollector e
>             if (metadata.isEncoded() || defaultValue != null) {
>                 // property methods may have @Encoded or @DefaultValue but
>                 // are not HTTP methods/paths
> +                logger.trace("createdMethodMetadata() returning null");
>                 return null;
>             }
>             if (logger.isWarnEnabled()) {
> @@ -349,21 +381,26 @@ public class ResourceMetadataCollector e
>                                                 method.getName(),
>                                                 method.getDeclaringClass().getCanonicalName()));
>             }
> +            logger.trace("createdMethodMetadata() returning null");
>             return null;
>         }
> 
>         parseMethodParameters(method, metadata);
> 
> +        logger.trace("createMethodMetadata() exit returning {}", metadata);
>         return metadata;
>     }
> 
> +    @SuppressWarnings("unchecked")
>     private MethodMetadata createMethodMetadata(Class<?> declaringClass, Method method) {
> +        logger.trace("createMethodMetadata({}, {}) entry", declaringClass, method);
>         try {
>             Method declaredMethod =
>                 declaringClass.getDeclaredMethod(method.getName(), method.getParameterTypes());
>             return createMethodMetadata(declaredMethod);
>         } catch (SecurityException e) {
>             // can't get to overriding method
> +            logger.trace("createMethodMetadata() exit returning null because of SecurityException");
>             return null;
>         } catch (NoSuchMethodException e) {
>             // see if declaringClass's declaredMethod uses generic parameters
> @@ -387,14 +424,16 @@ public class ResourceMetadataCollector e
>                             if (!clazz.isAssignableFrom(method.getParameterTypes()[i])) {
>                                 matchFound = false;
>                             }
> -                            if (matchFound) {
> -                                return createMethodMetadata(candidateMethod);
> -                            }
> +                        }
> +                        if (matchFound) {
> +                            return createMethodMetadata(candidateMethod);
>                         }
>                     }
>                 }
>             }
>             // no overriding method exists
> +            logger
> +                .trace("createMethodMetadata() exit returning null because of NoSuchMethodException");
>             return null;
>         }
>     }
> @@ -470,6 +509,7 @@ public class ResourceMetadataCollector e
>     }
> 
>     private void parseMethodParameters(Method method, MethodMetadata methodMetadata) {
> +        logger.trace("parseMethodParameters({}, {}), entry", method, methodMetadata);
>         Annotation[][] parameterAnnotations = method.getParameterAnnotations();
>         Type[] paramTypes = getParamTypesFilterByXmlElementAnnotation(method);
>         boolean entityParamExists = false;
> @@ -492,15 +532,17 @@ public class ResourceMetadataCollector e
>                 entityParamExists = true;
>             }
>             methodMetadata.getFormalParameters().add(fp);
> +            logger.trace("Adding formal parameter {}", fp);
>         }
> +        logger.trace("parseMethodParameters(), exit");
>     }
> 
>     private Type[] getParamTypesFilterByXmlElementAnnotation(Method method) {
>         int index = 0;
>         Type[] paramTypes = method.getGenericParameterTypes();
>         Annotation[][] paramAnnotations = method.getParameterAnnotations();
> -        for(Annotation[] annos: paramAnnotations) {
> -            for(Annotation anno: annos) {
> +        for (Annotation[] annos : paramAnnotations) {
> +            for (Annotation anno : annos) {
>                 if (anno.annotationType().equals(XmlElement.class)) {
>                     XmlElement xmlElement = (XmlElement)anno;
>                     Type type = xmlElement.type();
> 
> Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/model/multipart/OutPart.java
> URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/model/multipart/OutPart.java?rev=1027186&r1=1027185&r2=1027186&view=diff
> ==============================================================================
> --- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/model/multipart/OutPart.java (original)
> +++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/model/multipart/OutPart.java Mon Oct 25 16:32:45 2010
> @@ -98,7 +98,7 @@ public class OutPart {
>                     .valueOf(getContentType()));
>             if (writer == null) {
>                 logger
> -                    .warn(Messages.getMessage("couldNotFindWriter", getBody().getClass(), //$NON-NLS-1$
> +                    .error(Messages.getMessage("couldNotFindWriter", getBody().getClass(), //$NON-NLS-1$
>                            getContentType()));
>                 throw new WebApplicationException(500);
>             }
> 
> 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=1027186&r1=1027185&r2=1027186&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 Mon Oct 25 16:32:45 2010
> @@ -157,8 +157,8 @@ valueAtIndexIsNull=The value argument at
> variableIsEmpty=The {0} variable is empty. Verify that the variable is not empty.
> resourceNotAnnotated=The resource is not annotated with the {0} annotation.
> methodNotAnnotated=The method is not annotated with the {0} annotation.
> -moreThanOneMethodAnnotated=There is more than one method with the {0} annotation. Verify that the annotation is correctly annotated.
> -noMethodAnnotated=A method with the {0} annotation does not exist.
> +moreThanOneMethodAnnotated=There is more than one method with name {1} in resource {2} with the {0} annotation. Verify that the annotation is used on only one of the methods. 
> +noMethodAnnotated=A method with name {1} in resource {2} with the {0} annotation does not exist.
> invalidPort=The port is not valid. Verify that the port specified was correct.
> isInvalid=The {0} value is invalid.
> segmentAtIndexIsNull=The segment at the {0} index is null.
> 
>