You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/03/12 11:23:50 UTC

[13/21] WICKET-4439 Move classes around so that there are no two packages with the same name in different modules

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java
deleted file mode 100644
index ae07088..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/PageInstanceMapper.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.RequestListenerInterface;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.handler.ListenerInterfaceRequestHandler;
-import org.apache.wicket.request.handler.PageAndComponentProvider;
-import org.apache.wicket.request.handler.PageProvider;
-import org.apache.wicket.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.request.mapper.info.ComponentInfo;
-import org.apache.wicket.request.mapper.info.PageComponentInfo;
-import org.apache.wicket.request.mapper.info.PageInfo;
-
-/**
- * Decodes and encodes the following URLs:
- * 
- * <pre>
- *  Page Instance - Render (RenderPageRequestHandler)
- *  /wicket/page?2
- * 
- * 
- *  Page Instance - Listener (ListenerInterfaceRequestHandler)
- *  /wicket/page?2-click-foo-bar-baz
- *  /wicket/page?2-click.1-foo-bar-baz (1 is behavior index)
- * </pre>
- * 
- * @author Matej Knopp
- */
-public class PageInstanceMapper extends AbstractComponentMapper
-{
-	/**
-	 * Construct.
-	 */
-	public PageInstanceMapper()
-	{
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#mapRequest(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public IRequestHandler mapRequest(Request request)
-	{
-		Url url = request.getUrl();
-		if (matches(url))
-		{
-			PageComponentInfo info = getPageComponentInfo(url);
-			if (info != null && info.getPageInfo().getPageId() != null)
-			{
-				Integer renderCount = info.getComponentInfo() != null ? info.getComponentInfo()
-					.getRenderCount() : null;
-
-				if (info.getComponentInfo() == null)
-				{
-					PageProvider provider = new PageProvider(info.getPageInfo().getPageId(),
-						renderCount);
-					provider.setPageSource(getContext());
-					// render page
-					return new RenderPageRequestHandler(provider);
-				}
-				else
-				{
-					ComponentInfo componentInfo = info.getComponentInfo();
-
-					PageAndComponentProvider provider = new PageAndComponentProvider(
-						info.getPageInfo().getPageId(), renderCount,
-						componentInfo.getComponentPath());
-
-					provider.setPageSource(getContext());
-
-					// listener interface
-					RequestListenerInterface listenerInterface = requestListenerInterfaceFromString(componentInfo.getListenerInterface());
-
-					return new ListenerInterfaceRequestHandler(provider, listenerInterface,
-						componentInfo.getBehaviorId());
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#mapHandler(org.apache.org.apache.wicket.request.IRequestHandler)
-	 */
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		PageComponentInfo info = null;
-
-		if (requestHandler instanceof RenderPageRequestHandler)
-		{
-			IRequestablePage page = ((RenderPageRequestHandler)requestHandler).getPage();
-
-			PageInfo i = new PageInfo(page.getPageId());
-			info = new PageComponentInfo(i, null);
-		}
-		else if (requestHandler instanceof ListenerInterfaceRequestHandler)
-		{
-			ListenerInterfaceRequestHandler handler = (ListenerInterfaceRequestHandler)requestHandler;
-			IRequestablePage page = handler.getPage();
-			String componentPath = handler.getComponentPath();
-			RequestListenerInterface listenerInterface = handler.getListenerInterface();
-
-			Integer renderCount = null;
-			if (listenerInterface.isIncludeRenderCount())
-			{
-				renderCount = page.getRenderCount();
-			}
-
-			PageInfo pageInfo = new PageInfo(page.getPageId());
-			ComponentInfo componentInfo = new ComponentInfo(renderCount,
-				requestListenerInterfaceToString(listenerInterface), componentPath,
-				handler.getBehaviorIndex());
-			info = new PageComponentInfo(pageInfo, componentInfo);
-		}
-
-		if (info != null)
-		{
-			Url url = new Url();
-			url.getSegments().add(getContext().getNamespace());
-			url.getSegments().add(getContext().getPageIdentifier());
-			encodePageComponentInfo(url, info);
-			return url;
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	/**
-	 * @see org.apache.wicket.request.IRequestMapper#getCompatibilityScore(org.apache.wicket.request.Request)
-	 */
-	@Override
-	public int getCompatibilityScore(final Request request)
-	{
-		int score = 0;
-		Url url = request.getUrl();
-		if (matches(url))
-		{
-			score = Integer.MAX_VALUE;
-		}
-		return score;
-	}
-
-	private boolean matches(final Url url)
-	{
-		return urlStartsWith(url, getContext().getNamespace(), getContext().getPageIdentifier());
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
deleted file mode 100644
index 6aa1541..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import java.util.List;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.IRequestMapper;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
-import org.apache.wicket.request.resource.IResource;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
-import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
-import org.apache.wicket.request.resource.caching.ResourceUrl;
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.string.Strings;
-
-/**
- * A {@link IRequestMapper} to mount resources to a custom mount path
- * <ul>
- * <li>maps indexed parameters to path segments</li>
- * <li>maps named parameters to query string arguments or placeholder path segments</li>
- * </ul>
- * 
- * <strong>sample structure of url</strong>
- * 
- * <pre>
- *    /myresources/${category}/images/[indexed-param-0]/[indexed-param-1]?[named-param-1=value]&[named-param-2=value2]
- * </pre>
- * 
- * <h4>sample usage</h4>
- * 
- * in your wicket application's init() method use a statement like this
- * <p/>
- * 
- * <pre>
- * mountResource(&quot;/images&quot;, new ImagesResourceReference()));
- * </pre>
- * 
- * Note: Mounted this way the resource reference has application scope, i.e. it is shared between
- * all users of the application. It is recommended to not keep any state in it.
- * 
- * @see org.apache.wicket.protocol.http.WebApplication#mountResource(String,
- *      org.apache.wicket.request.resource.ResourceReference)
- * 
- * @author Peter Ertl
- */
-public class ResourceMapper extends AbstractMapper implements IRequestMapper
-{
-	// encode page parameters into url + decode page parameters from url
-	private final IPageParametersEncoder parametersEncoder;
-
-	// mount path (= segments) the resource is bound to
-	private final String[] mountSegments;
-
-	// resource that the mapper links to
-	private final ResourceReference resourceReference;
-
-	/**
-	 * create a resource mapper for a resource
-	 * 
-	 * @param path
-	 *            mount path for the resource
-	 * @param resourceReference
-	 *            resource reference that should be linked to the mount path
-	 * 
-	 * @see #ResourceMapper(String, org.apache.wicket.request.resource.ResourceReference,
-	 *      org.apache.wicket.request.mapper.parameter.IPageParametersEncoder)
-	 */
-	public ResourceMapper(String path, ResourceReference resourceReference)
-	{
-		this(path, resourceReference, new PageParametersEncoder());
-	}
-
-	/**
-	 * create a resource mapper for a resource
-	 * 
-	 * @param path
-	 *            mount path for the resource
-	 * @param resourceReference
-	 *            resource reference that should be linked to the mount path
-	 * @param encoder
-	 *            encoder for url parameters
-	 */
-	public ResourceMapper(String path, ResourceReference resourceReference,
-		IPageParametersEncoder encoder)
-	{
-		Args.notEmpty(path, "path");
-		Args.notNull(resourceReference, "resourceReference");
-		Args.notNull(encoder, "encoder");
-
-		this.resourceReference = resourceReference;
-		mountSegments = getMountSegments(path);
-		parametersEncoder = encoder;
-	}
-
-	@Override
-	public IRequestHandler mapRequest(final Request request)
-	{
-		final Url url = new Url(request.getUrl());
-
-		// now extract the page parameters from the request url
-		PageParameters parameters = extractPageParameters(request, mountSegments.length,
-			parametersEncoder);
-
-		// remove caching information from current request
-		removeCachingDecoration(url, parameters);
-
-		// check if url matches mount path
-		if (urlStartsWith(url, mountSegments) == false)
-		{
-			return null;
-		}
-
-		// check if there are placeholders in mount segments
-		for (int index = 0; index < mountSegments.length; ++index)
-		{
-			String placeholder = getPlaceholder(mountSegments[index]);
-
-			if (placeholder != null)
-			{
-				// extract the parameter from URL
-				if (parameters == null)
-				{
-					parameters = new PageParameters();
-				}
-				parameters.add(placeholder, url.getSegments().get(index));
-			}
-		}
-		return new ResourceReferenceRequestHandler(resourceReference, parameters);
-	}
-
-	@Override
-	public int getCompatibilityScore(Request request)
-	{
-		return 0; // pages always have priority over resources
-	}
-
-	@Override
-	public Url mapHandler(IRequestHandler requestHandler)
-	{
-		if ((requestHandler instanceof ResourceReferenceRequestHandler) == false)
-		{
-			return null;
-		}
-
-		ResourceReferenceRequestHandler handler = (ResourceReferenceRequestHandler)requestHandler;
-
-		// see if request handler addresses the resource reference we serve
-		if (resourceReference.equals(handler.getResourceReference()) == false)
-		{
-			return null;
-		}
-
-		Url url = new Url();
-
-		// add mount path segments
-		for (String segment : mountSegments)
-		{
-			url.getSegments().add(segment);
-		}
-
-		// replace placeholder parameters
-		PageParameters parameters = new PageParameters(handler.getPageParameters());
-
-		for (int index = 0; index < mountSegments.length; ++index)
-		{
-			String placeholder = getPlaceholder(mountSegments[index]);
-
-			if (placeholder != null)
-			{
-				url.getSegments().set(index, parameters.get(placeholder).toString(""));
-				parameters.remove(placeholder);
-			}
-		}
-
-		// add caching information
-		addCachingDecoration(url, parameters);
-
-		// create url
-		return encodePageParameters(url, parameters, parametersEncoder);
-	}
-
-	protected IResourceCachingStrategy getCachingStrategy()
-	{
-		return Application.get().getResourceSettings().getCachingStrategy();
-	}
-
-	protected void addCachingDecoration(Url url, PageParameters parameters)
-	{
-		final List<String> segments = url.getSegments();
-		final int lastSegmentAt = segments.size() - 1;
-		final String filename = segments.get(lastSegmentAt);
-
-		if (Strings.isEmpty(filename) == false)
-		{
-			// TODO is calling getResource() a potential performance bottleneck?
-			final IResource resource = resourceReference.getResource();
-
-			if (resource instanceof IStaticCacheableResource)
-			{
-				final IStaticCacheableResource cacheable = (IStaticCacheableResource)resource;
-				final ResourceUrl cacheUrl = new ResourceUrl(filename, parameters);
-
-				getCachingStrategy().decorateUrl(cacheUrl, cacheable);
-
-				if (Strings.isEmpty(cacheUrl.getFileName()))
-				{
-					throw new IllegalStateException("caching strategy returned empty name for " +
-						resource);
-				}
-				segments.set(lastSegmentAt, cacheUrl.getFileName());
-			}
-		}
-	}
-
-	protected void removeCachingDecoration(Url url, PageParameters parameters)
-	{
-		final List<String> segments = url.getSegments();
-
-		if (segments.isEmpty() == false)
-		{
-			// get filename (the last segment)
-			final int lastSegmentAt = segments.size() - 1;
-			String filename = segments.get(lastSegmentAt);
-
-			// ignore requests with empty filename
-			if (Strings.isEmpty(filename))
-			{
-				return;
-			}
-
-			// create resource url from filename and query parameters
-			final ResourceUrl resourceUrl = new ResourceUrl(filename, parameters);
-
-			// remove caching information from request
-			getCachingStrategy().undecorateUrl(resourceUrl);
-
-			// check for broken caching strategy (this must never happen)
-			if (Strings.isEmpty(resourceUrl.getFileName()))
-			{
-				throw new IllegalStateException("caching strategy returned empty name for " +
-					resourceUrl);
-			}
-
-			segments.set(lastSegmentAt, resourceUrl.getFileName());
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceReferenceMapper.java
deleted file mode 100644
index c2d33ee..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceReferenceMapper.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
-import org.apache.wicket.util.IProvider;
-
-/**
- * Generic {@link ResourceReference} encoder that encodes and decodes non-mounted
- * {@link ResourceReference}s.
- * <p>
- * Decodes and encodes the following URLs:
- * 
- * <pre>
- *    /wicket/resource/org.apache.wicket.ResourceScope/name
- *    /wicket/resource/org.apache.wicket.ResourceScope/name?en
- *    /wicket/resource/org.apache.wicket.ResourceScope/name?-style
- *    /wicket/resource/org.apache.wicket.ResourceScope/resource/name.xyz?en_EN-style
- * </pre>
- * 
- * @author igor.vaynberg
- */
-public class ResourceReferenceMapper extends ParentPathReferenceRewriter
-{
-	/**
-	 * Construct.
-	 * 
-	 * @param pageParametersEncoder
-	 * @param parentPathPartEscapeSequence
-	 * @param cachingStrategy
-	 */
-	public ResourceReferenceMapper(IPageParametersEncoder pageParametersEncoder,
-		IProvider<String> parentPathPartEscapeSequence,
-		IProvider<IResourceCachingStrategy> cachingStrategy)
-	{
-		super(new BasicResourceReferenceMapper(pageParametersEncoder, cachingStrategy),
-			parentPathPartEscapeSequence);
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/mapper/StalePageException.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/mapper/StalePageException.java b/wicket-core/src/main/java/org/apache/wicket/request/mapper/StalePageException.java
deleted file mode 100644
index 8735a21..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/request/mapper/StalePageException.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.mapper;
-
-import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.request.component.IRequestablePage;
-
-/**
- * Exception invoked when when stale link has been clicked. The page should then be rerendered with
- * an explanatory error message.
- * 
- * @author Matej Knopp
- */
-public class StalePageException extends WicketRuntimeException
-{
-	private static final long serialVersionUID = 1L;
-
-	private final transient IRequestablePage page;
-
-	/**
-	 * 
-	 * Construct.
-	 * 
-	 * @param page
-	 */
-	public StalePageException(IRequestablePage page)
-	{
-		this.page = page;
-	}
-
-	/**
-	 * 
-	 * @return page instance
-	 */
-	public IRequestablePage getPage()
-	{
-		return page;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/ByteArrayResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ByteArrayResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ByteArrayResource.java
index 544f7ad..fe78ea0 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ByteArrayResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ByteArrayResource.java
@@ -18,11 +18,10 @@ package org.apache.wicket.request.resource;
 
 import java.net.URLConnection;
 
-import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.util.time.Time;
-
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.wicket.util.time.Time;
+
 /**
  * An {@link IResource} for byte arrays. The byte array can be static - passed to the constructor,
  * or dynamic - by overriding

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
index 2aef173..753caf0 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
@@ -27,7 +27,7 @@ import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.io.Streams;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.apache.wicket.util.resource.WebExternalResourceStream;
+import org.apache.wicket.core.util.resource.WebExternalResourceStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
index 1a6b1f4..26eaebb 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/IResource.java
@@ -16,11 +16,11 @@
  */
 package org.apache.wicket.request.resource;
 
-import org.apache.wicket.IClusterable;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.lang.Args;
 
 /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
index 467a151..46dcb7a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
@@ -30,11 +30,11 @@ import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
 import org.apache.wicket.settings.IResourceSettings;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.lang.Packages;
-import org.apache.wicket.util.lang.WicketObjects;
+import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.util.resource.IFixedLocationResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
index 6cb8d10..6becc8e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
@@ -24,7 +24,7 @@ import org.apache.wicket.Session;
 import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.lang.Packages;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
index 49c354d..04521a8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
@@ -22,9 +22,10 @@ import java.util.Locale;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Objects;
-import org.apache.wicket.util.lang.WicketObjects;
+import org.apache.wicket.core.util.lang.WicketObjects;
 
 /**
  * Reference to a resource. Can be used to reference global resources.
@@ -38,7 +39,7 @@ import org.apache.wicket.util.lang.WicketObjects;
  * @author Matej Knopp
  * @author Juergen Donnerstag
  */
-public abstract class ResourceReference implements Serializable
+public abstract class ResourceReference implements IClusterable
 {
 	private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
index 7600aa8..53dd6cd 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
@@ -25,7 +25,7 @@ import org.apache.wicket.Application;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.IResourceStreamWriter;
+import org.apache.wicket.core.util.resource.IResourceStreamWriter;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.time.Duration;
 import org.apache.wicket.util.time.Time;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
index 0f213ca..e796e23 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
@@ -18,7 +18,6 @@ package org.apache.wicket.request.resource.caching.version;
 
 import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/IPropertiesFactoryContext.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/IPropertiesFactoryContext.java b/wicket-core/src/main/java/org/apache/wicket/resource/IPropertiesFactoryContext.java
index 81901cf..e256236 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/IPropertiesFactoryContext.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/IPropertiesFactoryContext.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.resource;
 
 import org.apache.wicket.Localizer;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.util.watch.IModificationWatcher;
 
 /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/PropertiesFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/PropertiesFactory.java b/wicket-core/src/main/java/org/apache/wicket/resource/PropertiesFactory.java
index 18b98f8..efaa937 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/PropertiesFactory.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/PropertiesFactory.java
@@ -30,7 +30,7 @@ import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.listener.IChangeListener;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.util.value.ValueMap;
 import org.apache.wicket.util.watch.IModificationWatcher;
 import org.apache.wicket.util.watch.ModificationWatcher;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java b/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
index 126113c..7052e54 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
@@ -21,10 +21,10 @@ import java.io.InputStream;
 import java.nio.charset.Charset;
 
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/TextTemplateResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/TextTemplateResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/resource/TextTemplateResourceReference.java
index 7e85b92..8bb050e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/TextTemplateResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/TextTemplateResourceReference.java
@@ -20,11 +20,11 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.IClusterable;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.template.PackageTextTemplate;
 import org.apache.wicket.util.template.TextTemplate;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/bundles/IResourceBundle.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/IResourceBundle.java b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/IResourceBundle.java
index 8f7e7a7..88bae70 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/IResourceBundle.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/IResourceBundle.java
@@ -18,8 +18,8 @@ package org.apache.wicket.resource.bundles;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.ResourceBundles;
-import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.request.resource.ResourceReference;
 
 /***
  * Interface implemented by {@link ResourceReference}s that are bundles. A bundle is a resource that

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java b/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
index 8d702d3..c9bfcf1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
@@ -31,8 +31,8 @@ import org.apache.wicket.markup.repeater.AbstractRepeater;
 import org.apache.wicket.resource.IPropertiesFactory;
 import org.apache.wicket.resource.Properties;
 import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
-import org.apache.wicket.util.resource.locator.ResourceNameIterator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.ResourceNameIterator;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java b/wicket-core/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
index c4a967c..b526e71 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
@@ -21,7 +21,7 @@ import java.util.Locale;
 import org.apache.wicket.Application;
 import org.apache.wicket.resource.IPropertiesFactory;
 import org.apache.wicket.resource.Properties;
-import org.apache.wicket.util.resource.locator.ResourceNameIterator;
+import org.apache.wicket.core.util.resource.locator.ResourceNameIterator;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java b/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
index 26139a0..618a39b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/response/filter/AjaxServerAndClientTimeFilter.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import org.apache.wicket.Application;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.util.string.AppendingStringBuffer;
-import org.apache.wicket.util.string.JavaScriptUtils;
+import org.apache.wicket.core.util.string.JavaScriptUtils;
 import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,7 +56,7 @@ public class AjaxServerAndClientTimeFilter implements IResponseFilter
 	private static Logger log = LoggerFactory.getLogger(AjaxServerAndClientTimeFilter.class);
 
 	/**
-	 * @see org.apache.wicket.IResponseFilter#filter(org.apache.wicket.util.string.AppendingStringBuffer)
+	 * @see IResponseFilter#filter(org.apache.wicket.util.string.AppendingStringBuffer)
 	 */
 	@Override
 	public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer)

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java b/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
index b003bc2..47f637f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/response/filter/ServerAndClientTimeFilter.java
@@ -23,7 +23,7 @@ import org.apache.wicket.Application;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.util.string.AppendingStringBuffer;
-import org.apache.wicket.util.string.JavaScriptUtils;
+import org.apache.wicket.core.util.string.JavaScriptUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,7 +56,7 @@ public class ServerAndClientTimeFilter implements IResponseFilter
 	private static final Logger log = LoggerFactory.getLogger(ServerAndClientTimeFilter.class);
 
 	/**
-	 * @see org.apache.wicket.IResponseFilter#filter(AppendingStringBuffer)
+	 * @see IResponseFilter#filter(AppendingStringBuffer)
 	 */
 	@Override
 	public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer)

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/serialize/java/JavaSerializer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/serialize/java/JavaSerializer.java b/wicket-core/src/main/java/org/apache/wicket/serialize/java/JavaSerializer.java
index 9497f63..2b5beef 100644
--- a/wicket-core/src/main/java/org/apache/wicket/serialize/java/JavaSerializer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/serialize/java/JavaSerializer.java
@@ -33,7 +33,7 @@ import org.apache.wicket.application.IClassResolver;
 import org.apache.wicket.serialize.ISerializer;
 import org.apache.wicket.settings.IApplicationSettings;
 import org.apache.wicket.util.io.IOUtils;
-import org.apache.wicket.util.io.SerializableChecker;
+import org.apache.wicket.core.util.io.SerializableChecker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/settings/IRequestCycleSettings.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/IRequestCycleSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/IRequestCycleSettings.java
index a269201..2d8e3c6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/settings/IRequestCycleSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/IRequestCycleSettings.java
@@ -124,7 +124,7 @@ public interface IRequestCycleSettings
 		 * </p>
 		 * <p>
 		 * Also, even with this strategy set, it is ignored for instances of
-		 * {@link org.apache.wicket.request.handler.BookmarkableListenerInterfaceRequestHandler},
+		 * {@link org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler},
 		 * because otherwise they wouldn't be bookmarkable.
 		 * </p>
 		 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/settings/IResourceSettings.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/IResourceSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/IResourceSettings.java
index b93d68a..225f41c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/settings/IResourceSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/IResourceSettings.java
@@ -23,19 +23,19 @@ import org.apache.wicket.IResourceFactory;
 import org.apache.wicket.Localizer;
 import org.apache.wicket.css.ICssCompressor;
 import org.apache.wicket.javascript.IJavaScriptCompressor;
+import org.apache.wicket.markup.head.PriorityFirstComparator;
+import org.apache.wicket.markup.head.ResourceAggregator;
+import org.apache.wicket.markup.head.ResourceAggregator.RecordedHeaderItem;
 import org.apache.wicket.markup.html.IPackageResourceGuard;
 import org.apache.wicket.markup.html.PackageResourceGuard;
-import org.apache.wicket.markup.head.PriorityFirstComparator;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
 import org.apache.wicket.resource.IPropertiesFactory;
 import org.apache.wicket.resource.IPropertiesFactoryContext;
-import org.apache.wicket.markup.head.ResourceAggregator;
-import org.apache.wicket.markup.head.ResourceAggregator.RecordedHeaderItem;
 import org.apache.wicket.resource.loader.IStringResourceLoader;
 import org.apache.wicket.util.file.IFileCleaner;
 import org.apache.wicket.util.file.IResourceFinder;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.util.time.Duration;
 import org.apache.wicket.util.watch.IModificationWatcher;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/settings/def/ResourceSettings.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/def/ResourceSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/def/ResourceSettings.java
index a1e5f14..63e78dc 100644
--- a/wicket-core/src/main/java/org/apache/wicket/settings/def/ResourceSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/def/ResourceSettings.java
@@ -26,8 +26,9 @@ import org.apache.wicket.IResourceFactory;
 import org.apache.wicket.Localizer;
 import org.apache.wicket.css.ICssCompressor;
 import org.apache.wicket.javascript.IJavaScriptCompressor;
-import org.apache.wicket.markup.html.IPackageResourceGuard;
 import org.apache.wicket.markup.head.PriorityFirstComparator;
+import org.apache.wicket.markup.head.ResourceAggregator.RecordedHeaderItem;
+import org.apache.wicket.markup.html.IPackageResourceGuard;
 import org.apache.wicket.markup.html.SecurePackageResourceGuard;
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
@@ -39,7 +40,6 @@ import org.apache.wicket.request.resource.caching.version.LastModifiedResourceVe
 import org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
 import org.apache.wicket.request.resource.caching.version.RequestCycleCachedResourceVersion;
 import org.apache.wicket.resource.PropertiesFactory;
-import org.apache.wicket.markup.head.ResourceAggregator.RecordedHeaderItem;
 import org.apache.wicket.resource.loader.ClassStringResourceLoader;
 import org.apache.wicket.resource.loader.ComponentStringResourceLoader;
 import org.apache.wicket.resource.loader.IStringResourceLoader;
@@ -54,9 +54,9 @@ import org.apache.wicket.util.file.Path;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
-import org.apache.wicket.util.resource.locator.ResourceStreamLocator;
-import org.apache.wicket.util.resource.locator.caching.CachingResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.ResourceStreamLocator;
+import org.apache.wicket.core.util.resource.locator.caching.CachingResourceStreamLocator;
 import org.apache.wicket.util.time.Duration;
 import org.apache.wicket.util.watch.IModificationWatcher;
 import org.apache.wicket.util.watch.ModificationWatcher;

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/util/cookies/CookieDefaults.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/cookies/CookieDefaults.java b/wicket-core/src/main/java/org/apache/wicket/util/cookies/CookieDefaults.java
index 19daf47..a438e1a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/cookies/CookieDefaults.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/cookies/CookieDefaults.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.util.cookies;
 
-import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.io.IClusterable;
 
 /**
  * This class provides default values that are used by the CookieValuePersister class when it

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/util/crypt/KeyInSessionSunJceCryptFactory.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/crypt/KeyInSessionSunJceCryptFactory.java b/wicket-core/src/main/java/org/apache/wicket/util/crypt/KeyInSessionSunJceCryptFactory.java
deleted file mode 100644
index eee5591..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/crypt/KeyInSessionSunJceCryptFactory.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.crypt;
-
-import java.util.UUID;
-
-import org.apache.wicket.MetaDataKey;
-import org.apache.wicket.Session;
-
-/**
- * Crypt factory that produces {@link SunJceCrypt} instances based on http session-specific
- * encryption key. This allows each user to have their own encryption key, hardening against CSRF
- * attacks.
- * 
- * Note that the use of this crypt factory will result in an immediate creation of a http session
- * 
- * @author igor.vaynberg
- */
-public class KeyInSessionSunJceCryptFactory implements ICryptFactory
-{
-	/** metadata-key used to store crypto-key in session metadata */
-	private static MetaDataKey<String> KEY = new MetaDataKey<String>()
-	{
-		private static final long serialVersionUID = 1L;
-	};
-
-
-	@Override
-	public ICrypt newCrypt()
-	{
-		Session session = Session.get();
-		session.bind();
-
-		// retrieve or generate encryption key from session
-		String key = session.getMetaData(KEY);
-		if (key == null)
-		{
-			// generate new key
-			key = session.getId() + "." + UUID.randomUUID().toString();
-			session.setMetaData(KEY, key);
-		}
-
-		// build the crypt based on session key
-		ICrypt crypt = new SunJceCrypt();
-		crypt.setKey(key);
-		return crypt;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java b/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java
deleted file mode 100644
index 5c6374a..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.file;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.UrlResourceStream;
-import org.apache.wicket.util.string.StringList;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * Maintain a list of paths which might either be ordinary folders of the filesystem or relative
- * paths to the web application's servlet context.
- * 
- * @author Johan Compagner
- */
-public final class WebApplicationPath extends Path
-{
-	private final static Logger log = LoggerFactory.getLogger(WebApplicationPath.class);
-
-	private static final String WEB_INF = "WEB-INF/";
-
-	/** The list of urls in the path */
-	private final List<String> webappPaths = new ArrayList<String>();
-
-	/** The web apps servlet context */
-	private final ServletContext servletContext;
-
-	/**
-	 * Constructor
-	 * 
-	 * @param servletContext
-	 *            The webapplication context where the resources must be loaded from
-	 */
-	public WebApplicationPath(final ServletContext servletContext)
-	{
-		this.servletContext = servletContext;
-
-		// adding root so servlet context resources are always checked
-		webappPaths.add("/");
-	}
-
-	/**
-	 * @param path
-	 *            add a path that is lookup through the servlet context
-	 */
-	@Override
-	public void add(String path)
-	{
-		final Folder folder = new Folder(path);
-		if (folder.exists())
-		{
-			log.debug("Added path '{}' as a folder.", path);
-			super.add(folder);
-		}
-		else
-		{
-			if (!path.startsWith("/"))
-			{
-				path = "/" + path;
-			}
-			if (!path.endsWith("/"))
-			{
-				path += "/";
-			}
-			log.debug("Added path '{}' as a web path.", path);
-			webappPaths.add(path);
-		}
-	}
-
-	/**
-	 * 
-	 * @see org.apache.wicket.util.file.IResourceFinder#find(Class, String)
-	 */
-	@Override
-	public IResourceStream find(final Class<?> clazz, final String pathname)
-	{
-		if (pathname == null)
-		{
-			return null;
-		}
-
-		IResourceStream resourceStream = super.find(clazz, pathname);
-
-		if (resourceStream == null && pathname.startsWith(WEB_INF) == false)
-		{
-			for (String path : webappPaths)
-			{
-				try
-				{
-					final URL url = servletContext.getResource(path + pathname);
-					if (url != null)
-					{
-						resourceStream = new UrlResourceStream(url);
-						break;
-					}
-				}
-				catch (Exception ex)
-				{
-					// ignore, file couldn't be found
-				}
-			}
-		}
-
-		return resourceStream;
-	}
-
-	public List<String> getWebappPaths()
-	{
-		return webappPaths;
-	}
-	/**
-	 * @see java.lang.Object#toString()
-	 */
-	@Override
-	public String toString()
-	{
-		return "[folders = " + StringList.valueOf(getFolders()) + ", webapppaths: " +
-			StringList.valueOf(webappPaths) + "]";
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/1257c03d/wicket-core/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/io/SerializableChecker.java b/wicket-core/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
deleted file mode 100644
index c5c11c6..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/io/SerializableChecker.java
+++ /dev/null
@@ -1,734 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.io;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.NotSerializableException;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamClass;
-import java.io.ObjectStreamField;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.WicketRuntimeException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * Utility class that analyzes objects for non-serializable nodes. Construct, then call
- * {@link #check(Object)} with the object you want to check. When a non-serializable object is
- * found, a {@link WicketNotSerializableException} is thrown with a message that shows the trace up
- * to the not-serializable object. The exception is thrown for the first non-serializable instance
- * it encounters, so multiple problems will not be shown.
- * <p>
- * As this class depends heavily on JDK's serialization internals using introspection, analyzing may
- * not be possible, for instance when the runtime environment does not have sufficient rights to set
- * fields accessible that would otherwise be hidden. You should call
- * {@link SerializableChecker#isAvailable()} to see whether this class can operate properly. If it
- * doesn't, you should fall back to e.g. re-throwing/ printing the {@link NotSerializableException}
- * you probably got before using this class.
- * </p>
- * 
- * @author eelcohillenius
- * @author Al Maw
- */
-public final class SerializableChecker extends ObjectOutputStream
-{
-
-	/** log. */
-	private static final Logger log = LoggerFactory.getLogger(SerializableChecker.class);
-
-	/**
-	 * Exception that is thrown when a non-serializable object was found.
-	 */
-	public static final class WicketNotSerializableException extends WicketRuntimeException
-	{
-		private static final long serialVersionUID = 1L;
-
-		WicketNotSerializableException(String message, Throwable cause)
-		{
-			super(message, cause);
-		}
-	}
-
-	/**
-	 * Does absolutely nothing.
-	 */
-	private static class NoopOutputStream extends OutputStream
-	{
-		@Override
-		public void close()
-		{
-		}
-
-		@Override
-		public void flush()
-		{
-		}
-
-		@Override
-		public void write(byte[] b)
-		{
-		}
-
-		@Override
-		public void write(byte[] b, int i, int l)
-		{
-		}
-
-		@Override
-		public void write(int b)
-		{
-		}
-	}
-
-	private static abstract class ObjectOutputAdaptor implements ObjectOutput
-	{
-
-		@Override
-		public void close() throws IOException
-		{
-		}
-
-		@Override
-		public void flush() throws IOException
-		{
-		}
-
-		@Override
-		public void write(byte[] b) throws IOException
-		{
-		}
-
-		@Override
-		public void write(byte[] b, int off, int len) throws IOException
-		{
-		}
-
-		@Override
-		public void write(int b) throws IOException
-		{
-		}
-
-		@Override
-		public void writeBoolean(boolean v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeByte(int v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeBytes(String s) throws IOException
-		{
-		}
-
-		@Override
-		public void writeChar(int v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeChars(String s) throws IOException
-		{
-		}
-
-		@Override
-		public void writeDouble(double v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeFloat(float v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeInt(int v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeLong(long v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeShort(int v) throws IOException
-		{
-		}
-
-		@Override
-		public void writeUTF(String str) throws IOException
-		{
-		}
-	}
-
-	/** Holds information about the field and the resulting object being traced. */
-	private static final class TraceSlot
-	{
-		private final String fieldDescription;
-
-		private final Object object;
-
-		TraceSlot(Object object, String fieldDescription)
-		{
-			super();
-			this.object = object;
-			this.fieldDescription = fieldDescription;
-		}
-
-		@Override
-		public String toString()
-		{
-			return object.getClass() + " - " + fieldDescription;
-		}
-	}
-
-	private static final NoopOutputStream DUMMY_OUTPUT_STREAM = new NoopOutputStream();
-
-	/** Whether we can execute the tests. If false, check will just return. */
-	private static boolean available = true;
-
-	// this hack - accessing the serialization API through introspection - is
-	// the only way to use Java serialization for our purposes without writing
-	// the whole thing from scratch (and even then, it would be limited). This
-	// way of working is of course fragile for internal API changes, but as we
-	// do an extra check on availability and we report when we can't use this
-	// introspection fu, we'll find out soon enough and clients on this class
-	// can fall back on Java's default exception for serialization errors (which
-	// sucks and is the main reason for this attempt).
-	private static Method LOOKUP_METHOD;
-
-	private static Method GET_CLASS_DATA_LAYOUT_METHOD;
-
-	private static Method GET_NUM_OBJ_FIELDS_METHOD;
-
-	private static Method GET_OBJ_FIELD_VALUES_METHOD;
-
-	private static Method GET_FIELD_METHOD;
-
-	private static Method HAS_WRITE_REPLACE_METHOD_METHOD;
-
-	private static Method INVOKE_WRITE_REPLACE_METHOD;
-
-	static
-	{
-		try
-		{
-			LOOKUP_METHOD = ObjectStreamClass.class.getDeclaredMethod("lookup", new Class[] {
-					Class.class, Boolean.TYPE });
-			LOOKUP_METHOD.setAccessible(true);
-
-			GET_CLASS_DATA_LAYOUT_METHOD = ObjectStreamClass.class.getDeclaredMethod(
-				"getClassDataLayout", (Class[])null);
-			GET_CLASS_DATA_LAYOUT_METHOD.setAccessible(true);
-
-			GET_NUM_OBJ_FIELDS_METHOD = ObjectStreamClass.class.getDeclaredMethod(
-				"getNumObjFields", (Class[])null);
-			GET_NUM_OBJ_FIELDS_METHOD.setAccessible(true);
-
-			GET_OBJ_FIELD_VALUES_METHOD = ObjectStreamClass.class.getDeclaredMethod(
-				"getObjFieldValues", new Class[] { Object.class, Object[].class });
-			GET_OBJ_FIELD_VALUES_METHOD.setAccessible(true);
-
-			GET_FIELD_METHOD = ObjectStreamField.class.getDeclaredMethod("getField", (Class[])null);
-			GET_FIELD_METHOD.setAccessible(true);
-
-			HAS_WRITE_REPLACE_METHOD_METHOD = ObjectStreamClass.class.getDeclaredMethod(
-				"hasWriteReplaceMethod", (Class[])null);
-			HAS_WRITE_REPLACE_METHOD_METHOD.setAccessible(true);
-
-			INVOKE_WRITE_REPLACE_METHOD = ObjectStreamClass.class.getDeclaredMethod(
-				"invokeWriteReplace", new Class[] { Object.class });
-			INVOKE_WRITE_REPLACE_METHOD.setAccessible(true);
-		}
-		catch (Exception e)
-		{
-			log.warn("SerializableChecker not available", e);
-			available = false;
-		}
-	}
-
-	/**
-	 * Gets whether we can execute the tests. If false, calling {@link #check(Object)} will just
-	 * return and you are advised to rely on the {@link NotSerializableException}. Clients are
-	 * advised to call this method prior to calling the check method.
-	 * 
-	 * @return whether security settings and underlying API etc allow for accessing the
-	 *         serialization API using introspection
-	 */
-	public static boolean isAvailable()
-	{
-		return available;
-	}
-
-	/** object stack that with the trace path. */
-	private final LinkedList<TraceSlot> traceStack = new LinkedList<TraceSlot>();
-
-	/** set for checking circular references. */
-	private final Map<Object, Object> checked = new IdentityHashMap<Object, Object>();
-
-	/** string stack with current names pushed. */
-	private final LinkedList<String> nameStack = new LinkedList<String>();
-
-	/** root object being analyzed. */
-	private Object root;
-
-	/** set of classes that had no writeObject methods at lookup (to avoid repeated checking) */
-	private final Set<Class<?>> writeObjectMethodMissing = new HashSet<Class<?>>();
-
-	/** current simple field name. */
-	private String simpleName = "";
-
-	/** current full field description. */
-	private String fieldDescription;
-
-	/** Exception that should be set as the cause when throwing a new exception. */
-	private final NotSerializableException exception;
-
-	private final Stack<Object> stack = new Stack<Object>();
-
-	/**
-	 * Construct.
-	 * 
-	 * @param exception
-	 *            exception that should be set as the cause when throwing a new exception
-	 * 
-	 * @throws IOException
-	 */
-	public SerializableChecker(NotSerializableException exception) throws IOException
-	{
-		this.exception = exception;
-	}
-
-	/**
-	 * @see java.io.ObjectOutputStream#reset()
-	 */
-	@Override
-	public void reset() throws IOException
-	{
-		root = null;
-		checked.clear();
-		fieldDescription = null;
-		simpleName = null;
-		traceStack.clear();
-		nameStack.clear();
-		writeObjectMethodMissing.clear();
-	}
-
-	private void check(Object obj)
-	{
-		if (obj == null)
-		{
-			return;
-		}
-
-		try
-		{
-			if (stack.contains(obj))
-			{
-				return;
-			}
-		}
-		catch (RuntimeException e)
-		{
-			log.warn("Wasn't possible to check the object " + obj.getClass() +
-				" possible due an problematic implementation of equals method");
-			/*
-			 * Can't check if this obj were in stack, giving up because we don't want to throw an
-			 * invaluable exception to user. The main goal of this checker is to find non
-			 * serializable data
-			 */
-			return;
-		}
-
-		stack.push(obj);
-		try
-		{
-			internalCheck(obj);
-		}
-		finally
-		{
-			stack.pop();
-		}
-	}
-
-	private void internalCheck(Object obj)
-	{
-		if (obj == null)
-		{
-			return;
-		}
-
-		Class<?> cls = obj.getClass();
-		nameStack.add(simpleName);
-		traceStack.add(new TraceSlot(obj, fieldDescription));
-
-		if (!(obj instanceof Serializable) && (!Proxy.isProxyClass(cls)))
-		{
-			throw new WicketNotSerializableException(
-				toPrettyPrintedStack(obj.getClass().getName()), exception);
-		}
-
-		ObjectStreamClass desc;
-		for (;;)
-		{
-			try
-			{
-				desc = (ObjectStreamClass)LOOKUP_METHOD.invoke(null, cls, Boolean.TRUE);
-				Class<?> repCl;
-				if (!(Boolean)HAS_WRITE_REPLACE_METHOD_METHOD.invoke(desc, (Object[])null) ||
-					(obj = INVOKE_WRITE_REPLACE_METHOD.invoke(desc, obj)) == null ||
-					(repCl = obj.getClass()) == cls)
-				{
-					break;
-				}
-				cls = repCl;
-			}
-			catch (IllegalAccessException e)
-			{
-				throw new RuntimeException(e);
-			}
-			catch (InvocationTargetException e)
-			{
-				throw new RuntimeException(e);
-			}
-		}
-
-		if (cls.isPrimitive())
-		{
-			// skip
-		}
-		else if (cls.isArray())
-		{
-			checked.put(obj, null);
-			Class<?> ccl = cls.getComponentType();
-			if (!(ccl.isPrimitive()))
-			{
-				Object[] objs = (Object[])obj;
-				for (int i = 0; i < objs.length; i++)
-				{
-					String arrayPos = "[" + i + "]";
-					simpleName = arrayPos;
-					fieldDescription += arrayPos;
-					check(objs[i]);
-				}
-			}
-		}
-		else if (obj instanceof Externalizable && (!Proxy.isProxyClass(cls)))
-		{
-			Externalizable extObj = (Externalizable)obj;
-			try
-			{
-				extObj.writeExternal(new ObjectOutputAdaptor()
-				{
-					private int count = 0;
-
-					@Override
-					public void writeObject(Object streamObj) throws IOException
-					{
-						// Check for circular reference.
-						if (checked.containsKey(streamObj))
-						{
-							return;
-						}
-
-						checked.put(streamObj, null);
-						String arrayPos = "[write:" + count++ + "]";
-						simpleName = arrayPos;
-						fieldDescription += arrayPos;
-
-						check(streamObj);
-					}
-				});
-			}
-			catch (Exception e)
-			{
-				if (e instanceof WicketNotSerializableException)
-				{
-					throw (WicketNotSerializableException)e;
-				}
-				log.warn("error delegating to Externalizable : " + e.getMessage() + ", path: " +
-					currentPath());
-			}
-		}
-		else
-		{
-			Method writeObjectMethod = null;
-			if (writeObjectMethodMissing.contains(cls) == false)
-			{
-				try
-				{
-					writeObjectMethod = cls.getDeclaredMethod("writeObject",
-						new Class[] { java.io.ObjectOutputStream.class });
-				}
-				catch (SecurityException e)
-				{
-					// we can't access / set accessible to true
-					writeObjectMethodMissing.add(cls);
-				}
-				catch (NoSuchMethodException e)
-				{
-					// cls doesn't have that method
-					writeObjectMethodMissing.add(cls);
-				}
-			}
-
-			final Object original = obj;
-			if (writeObjectMethod != null)
-			{
-				class InterceptingObjectOutputStream extends ObjectOutputStream
-				{
-					private int counter;
-
-					InterceptingObjectOutputStream() throws IOException
-					{
-						super(DUMMY_OUTPUT_STREAM);
-						enableReplaceObject(true);
-					}
-
-					@Override
-					protected Object replaceObject(Object streamObj) throws IOException
-					{
-						if (streamObj == original)
-						{
-							return streamObj;
-						}
-
-						counter++;
-						// Check for circular reference.
-						if (checked.containsKey(streamObj))
-						{
-							return null;
-						}
-
-						checked.put(streamObj, null);
-						String arrayPos = "[write:" + counter + "]";
-						simpleName = arrayPos;
-						fieldDescription += arrayPos;
-						check(streamObj);
-						return streamObj;
-					}
-				}
-				try
-				{
-					InterceptingObjectOutputStream ioos = new InterceptingObjectOutputStream();
-					ioos.writeObject(obj);
-				}
-				catch (Exception e)
-				{
-					if (e instanceof WicketNotSerializableException)
-					{
-						throw (WicketNotSerializableException)e;
-					}
-					log.warn("error delegating to writeObject : " + e.getMessage() + ", path: " +
-						currentPath());
-				}
-			}
-			else
-			{
-				Object[] slots;
-				try
-				{
-					slots = (Object[])GET_CLASS_DATA_LAYOUT_METHOD.invoke(desc, (Object[])null);
-				}
-				catch (Exception e)
-				{
-					throw new RuntimeException(e);
-				}
-				for (Object slot : slots)
-				{
-					ObjectStreamClass slotDesc;
-					try
-					{
-						Field descField = slot.getClass().getDeclaredField("desc");
-						descField.setAccessible(true);
-						slotDesc = (ObjectStreamClass)descField.get(slot);
-					}
-					catch (Exception e)
-					{
-						throw new RuntimeException(e);
-					}
-					checked.put(obj, null);
-					checkFields(obj, slotDesc);
-				}
-			}
-		}
-
-		traceStack.removeLast();
-		nameStack.removeLast();
-	}
-
-	private void checkFields(Object obj, ObjectStreamClass desc)
-	{
-		int numFields;
-		try
-		{
-			numFields = (Integer)GET_NUM_OBJ_FIELDS_METHOD.invoke(desc, (Object[])null);
-		}
-		catch (IllegalAccessException e)
-		{
-			throw new RuntimeException(e);
-		}
-		catch (InvocationTargetException e)
-		{
-			throw new RuntimeException(e);
-		}
-
-		if (numFields > 0)
-		{
-			int numPrimFields;
-			ObjectStreamField[] fields = desc.getFields();
-			Object[] objVals = new Object[numFields];
-			numPrimFields = fields.length - objVals.length;
-			try
-			{
-				GET_OBJ_FIELD_VALUES_METHOD.invoke(desc, obj, objVals);
-			}
-			catch (IllegalAccessException e)
-			{
-				throw new RuntimeException(e);
-			}
-			catch (InvocationTargetException e)
-			{
-				throw new RuntimeException(e);
-			}
-			for (int i = 0; i < objVals.length; i++)
-			{
-				if (objVals[i] instanceof String || objVals[i] instanceof Number ||
-					objVals[i] instanceof Date || objVals[i] instanceof Boolean ||
-					objVals[i] instanceof Class)
-				{
-					// filter out common cases
-					continue;
-				}
-
-				// Check for circular reference.
-				if (checked.containsKey(objVals[i]))
-				{
-					continue;
-				}
-
-				ObjectStreamField fieldDesc = fields[numPrimFields + i];
-				Field field;
-				try
-				{
-					field = (Field)GET_FIELD_METHOD.invoke(fieldDesc, (Object[])null);
-				}
-				catch (IllegalAccessException e)
-				{
-					throw new RuntimeException(e);
-				}
-				catch (InvocationTargetException e)
-				{
-					throw new RuntimeException(e);
-				}
-
-				field.getName();
-				simpleName = field.getName();
-				fieldDescription = field.toString();
-				check(objVals[i]);
-			}
-		}
-	}
-
-	/**
-	 * @return name from root to current node concatenated with slashes
-	 */
-	private StringBuilder currentPath()
-	{
-		StringBuilder b = new StringBuilder();
-		for (Iterator<String> it = nameStack.iterator(); it.hasNext();)
-		{
-			b.append(it.next());
-			if (it.hasNext())
-			{
-				b.append('/');
-			}
-		}
-		return b;
-	}
-
-	/**
-	 * Dump with indentation.
-	 * 
-	 * @param type
-	 *            the type that couldn't be serialized
-	 * @return A very pretty dump
-	 */
-	private final String toPrettyPrintedStack(String type)
-	{
-		StringBuilder result = new StringBuilder();
-		StringBuilder spaces = new StringBuilder();
-		result.append("Unable to serialize class: ");
-		result.append(type);
-		result.append("\nField hierarchy is:");
-		for (Iterator<TraceSlot> i = traceStack.listIterator(); i.hasNext();)
-		{
-			spaces.append("  ");
-			TraceSlot slot = i.next();
-			result.append("\n").append(spaces).append(slot.fieldDescription);
-			result.append(" [class=").append(slot.object.getClass().getName());
-			if (slot.object instanceof Component)
-			{
-				Component component = (Component)slot.object;
-				result.append(", path=").append(component.getPath());
-			}
-			result.append("]");
-		}
-		result.append(" <----- field that is not serializable");
-		return result.toString();
-	}
-
-	/**
-	 * @see java.io.ObjectOutputStream#writeObjectOverride(java.lang.Object)
-	 */
-	@Override
-	protected final void writeObjectOverride(Object obj) throws IOException
-	{
-		if (!available)
-		{
-			return;
-		}
-		root = obj;
-		if (fieldDescription == null)
-		{
-			fieldDescription = (root instanceof Component) ? ((Component)root).getPath() : "";
-		}
-
-		check(root);
-	}
-}
\ No newline at end of file