Author: ivaynberg Date: Mon Apr 26 17:50:00 2010 New Revision: 938151 URL: http://svn.apache.org/viewvc?rev=938151&view=rev Log: ajax not working due to bugs in resource handling Issue: WICKET-2839
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/ wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java (with props) wicket/trunk/wicket/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java (with props) Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java?rev=938151&r1=938150&r2=938151&view=diff ============================================================================== --- wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java (original) +++ wicket/trunk/wicket/src/main/java/org/apache/wicket/request/resource/AbstractResource.java Mon Apr 26 17:50:00 2010 @@ -463,7 +463,7 @@ public abstract class AbstractResource i @Override public void write(byte[] b, int off, int len) throws IOException { - if (off == 0 || len == b.length) + if (off == 0 && len == b.length) { write(b); } Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java?rev=938151&r1=938150&r2=938151&view=diff ============================================================================== --- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java (original) +++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java Mon Apr 26 17:50:00 2010 @@ -193,26 +193,26 @@ public class UrlResourceStream extends A @Override public Time lastModifiedTime() { - if (file != null) + try { - // in case the file has been removed by now - if (file.exists() == false) + if (file != null) { - return null; - } + // in case the file has been removed by now + if (file.exists() == false) + { + return null; + } - long lastModified = file.lastModified(); + long lastModified = file.lastModified(); - // if last modified changed update content length and last modified date - if (lastModified != this.lastModified) - { - this.lastModified = lastModified; - contentLength = (int)file.length(); + // if last modified changed update content length and last modified date + if (lastModified != this.lastModified) + { + this.lastModified = lastModified; + setContentLength(); + } } - } - else - { - try + else { long lastModified = Connections.getLastModified(url); @@ -221,31 +221,35 @@ public class UrlResourceStream extends A { this.lastModified = lastModified; - URLConnection connection = url.openConnection(); - contentLength = connection.getContentLength(); - Connections.close(connection); + setContentLength(); } } - catch (IOException e) + return Time.milliseconds(lastModified); + } + catch (IOException e) + { + if (url.toString().indexOf(".jar!") >= 0) { - if (url.toString().indexOf(".jar!") >= 0) + if (log.isDebugEnabled()) { - if (log.isDebugEnabled()) - { - log.debug("getLastModified for " + url + " failed: " + e.getMessage()); - } + log.debug("getLastModified for " + url + " failed: " + e.getMessage()); } - else - { - log.warn("getLastModified for " + url + " failed: " + e.getMessage()); - } - - // allow modification watcher to detect the problem - return null; + } + else + { + log.warn("getLastModified for " + url + " failed: " + e.getMessage()); } + // allow modification watcher to detect the problem + return null; } - return Time.milliseconds(lastModified); + } + + private void setContentLength() throws IOException + { + URLConnection connection = url.openConnection(); + contentLength = connection.getContentLength(); + Connections.close(connection); } /** Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java?rev=938151&view=auto ============================================================================== --- wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java (added) +++ wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java Mon Apr 26 17:50:00 2010 @@ -0,0 +1,63 @@ +/* + * 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.resource; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Arrays; + +import junit.framework.TestCase; + +import org.apache.wicket.mock.MockWebRequest; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.resource.AbstractResource.WriteCallback; +import org.apache.wicket.request.resource.IResource.Attributes; +import org.apache.wicket.response.ByteArrayResponse; + + +/** + * @author Kent Tong + */ +public class WriteCallbackTest extends TestCase +{ + + /** + */ + public void testWriteStream() + { + WriteCallback callback = new WriteCallback() + { + + @Override + public void writeData(Attributes attributes) + { + + } + }; + ByteArrayResponse response = new ByteArrayResponse(); + Attributes attributes = new Attributes(new MockWebRequest(new Url()), response); + byte[] srcData = new byte[5000]; + for (int i = 0; i < srcData.length; i++) + { + srcData[i] = (byte)i; + } + InputStream in = new ByteArrayInputStream(srcData); + callback.writeStream(attributes, in); + assertTrue("Content not equal", Arrays.equals(response.getBytes(), srcData)); + } + +} Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java?rev=938151&view=auto ============================================================================== --- wicket/trunk/wicket/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java (added) +++ wicket/trunk/wicket/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java Mon Apr 26 17:50:00 2010 @@ -0,0 +1,46 @@ +/* + * 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.resource; + +import java.io.IOException; +import java.net.URL; + +import junit.framework.TestCase; + +/** + * + * @author Kent Tong + */ +public class UrlResourceStreamTest extends TestCase +{ + /** + * lastModified() shouldn't change the content length if the file isn't really changed. + * + * @throws IOException + */ + public void testLastModifiedForResourceInJar() throws IOException + { + String anyClassInJarFile = "/java/lang/String.class"; + URL url = getClass().getResource(anyClassInJarFile); + UrlResourceStream stream = new UrlResourceStream(url); + long length = stream.length(); + stream.lastModifiedTime(); + assertEquals(stream.length(), length); + stream.close(); + } + +} Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain