consistent copies of mocks

This commit is contained in:
Juergen Hoeller 2009-01-20 18:08:14 +00:00
parent 8dbbb533f3
commit 9dec670be4
18 changed files with 3476 additions and 3210 deletions

View File

@ -1,67 +1,66 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletInputStream;
import org.springframework.util.Assert;
import org.springframework.util.Assert;
/**
/** * Delegating implementation of {@link javax.servlet.ServletInputStream}.
* Delegating implementation of {@link javax.servlet.ServletInputStream}. *
* * <p>Used by {@link MockHttpServletRequest}; typically not directly
* <p>Used by {@link org.springframework.mock.web.MockHttpServletRequest}; typically not directly * used for testing application controllers.
* used for testing application controllers. *
* * @author Juergen Hoeller
* @author Juergen Hoeller * @since 1.0.2
* @since 1.0.2 * @see MockHttpServletRequest
* @see org.springframework.mock.web.MockHttpServletRequest */
*/ public class DelegatingServletInputStream extends ServletInputStream {
public class DelegatingServletInputStream extends ServletInputStream {
private final InputStream sourceStream;
private final InputStream sourceStream;
/**
/** * Create a DelegatingServletInputStream for the given source stream.
* Create a DelegatingServletInputStream for the given source stream. * @param sourceStream the source stream (never <code>null</code>)
* @param sourceStream the source stream (never <code>null</code>) */
*/ public DelegatingServletInputStream(InputStream sourceStream) {
public DelegatingServletInputStream(InputStream sourceStream) { Assert.notNull(sourceStream, "Source InputStream must not be null");
Assert.notNull(sourceStream, "Source InputStream must not be null"); this.sourceStream = sourceStream;
this.sourceStream = sourceStream; }
}
/**
/** * Return the underlying source stream (never <code>null</code>).
* Return the underlying source stream (never <code>null</code>). */
*/ public final InputStream getSourceStream() {
public final InputStream getSourceStream() { return this.sourceStream;
return this.sourceStream; }
}
public int read() throws IOException {
public int read() throws IOException { return this.sourceStream.read();
return this.sourceStream.read(); }
}
public void close() throws IOException {
public void close() throws IOException { super.close();
super.close(); this.sourceStream.close();
this.sourceStream.close(); }
}
}
}

View File

@ -1,72 +1,71 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletOutputStream;
import org.springframework.util.Assert;
import org.springframework.util.Assert;
/**
/** * Delegating implementation of {@link javax.servlet.ServletOutputStream}.
* Delegating implementation of {@link javax.servlet.ServletOutputStream}. *
* * <p>Used by {@link MockHttpServletResponse}; typically not directly
* <p>Used by {@link org.springframework.mock.web.MockHttpServletResponse}; typically not directly * used for testing application controllers.
* used for testing application controllers. *
* * @author Juergen Hoeller
* @author Juergen Hoeller * @since 1.0.2
* @since 1.0.2 * @see MockHttpServletResponse
* @see org.springframework.mock.web.MockHttpServletResponse */
*/ public class DelegatingServletOutputStream extends ServletOutputStream {
public class DelegatingServletOutputStream extends ServletOutputStream {
private final OutputStream targetStream;
private final OutputStream targetStream;
/**
/** * Create a DelegatingServletOutputStream for the given target stream.
* Create a DelegatingServletOutputStream for the given target stream. * @param targetStream the target stream (never <code>null</code>)
* @param targetStream the target stream (never <code>null</code>) */
*/ public DelegatingServletOutputStream(OutputStream targetStream) {
public DelegatingServletOutputStream(OutputStream targetStream) { Assert.notNull(targetStream, "Target OutputStream must not be null");
Assert.notNull(targetStream, "Target OutputStream must not be null"); this.targetStream = targetStream;
this.targetStream = targetStream; }
}
/**
/** * Return the underlying target stream (never <code>null</code>).
* Return the underlying target stream (never <code>null</code>). */
*/ public final OutputStream getTargetStream() {
public final OutputStream getTargetStream() { return this.targetStream;
return this.targetStream; }
}
public void write(int b) throws IOException {
public void write(int b) throws IOException { this.targetStream.write(b);
this.targetStream.write(b); }
}
public void flush() throws IOException {
public void flush() throws IOException { super.flush();
super.flush(); this.targetStream.flush();
this.targetStream.flush(); }
}
public void close() throws IOException {
public void close() throws IOException { super.close();
super.close(); this.targetStream.close();
this.targetStream.close(); }
}
}
}

View File

@ -1,85 +1,92 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.util.Collection; import java.util.ArrayList;
import java.util.Collections; import java.util.Collection;
import java.util.Iterator; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
/** /**
* Internal helper class that serves as value holder for request headers. * Internal helper class that serves as value holder for request headers.
* *
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Rick Evans * @author Rick Evans
* @since 2.0.1 * @since 2.0.1
*/ */
class HeaderValueHolder { class HeaderValueHolder {
private final List values = new LinkedList(); private final List<Object> values = new LinkedList<Object>();
public void setValue(Object value) { public void setValue(Object value) {
this.values.clear(); this.values.clear();
this.values.add(value); this.values.add(value);
} }
public void addValue(Object value) { public void addValue(Object value) {
this.values.add(value); this.values.add(value);
} }
public void addValues(Collection values) { public void addValues(Collection<?> values) {
this.values.addAll(values); this.values.addAll(values);
} }
public void addValueArray(Object values) { public void addValueArray(Object values) {
CollectionUtils.mergeArrayIntoCollection(values, this.values); CollectionUtils.mergeArrayIntoCollection(values, this.values);
} }
public List getValues() { public List<Object> getValues() {
return Collections.unmodifiableList(this.values); return Collections.unmodifiableList(this.values);
} }
public Object getValue() { public List<String> getStringValues() {
return (!this.values.isEmpty() ? this.values.get(0) : null); List<String> stringList = new ArrayList<String>(this.values.size());
} for (Object value : this.values) {
stringList.add(value.toString());
}
/** return Collections.unmodifiableList(stringList);
* Find a HeaderValueHolder by name, ignoring casing. }
* @param headers the Map of header names to HeaderValueHolders
* @param name the name of the desired header public Object getValue() {
* @return the corresponding HeaderValueHolder, return (!this.values.isEmpty() ? this.values.get(0) : null);
* or <code>null</code> if none found }
*/
public static HeaderValueHolder getByName(Map headers, String name) {
Assert.notNull(name, "Header name must not be null"); /**
for (Iterator it = headers.keySet().iterator(); it.hasNext();) { * Find a HeaderValueHolder by name, ignoring casing.
String headerName = (String) it.next(); * @param headers the Map of header names to HeaderValueHolders
if (headerName.equalsIgnoreCase(name)) { * @param name the name of the desired header
return (HeaderValueHolder) headers.get(headerName); * @return the corresponding HeaderValueHolder,
} * or <code>null</code> if none found
} */
return null; public static HeaderValueHolder getByName(Map<String, HeaderValueHolder> headers, String name) {
} Assert.notNull(name, "Header name must not be null");
for (String headerName : headers.keySet()) {
} if (headerName.equalsIgnoreCase(name)) {
return headers.get(headerName);
}
}
return null;
}
}

View File

@ -1,198 +1,197 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import java.io.Reader; import java.io.Reader;
import java.io.StringReader; import java.io.StringReader;
import java.io.Writer; import java.io.Writer;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyContent;
/**
/** * Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class.
* Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class. *
* * <p>Used for testing the web framework; only necessary for testing
* <p>Used for testing the web framework; only necessary for testing * applications when testing custom JSP tags.
* applications when testing custom JSP tags. *
* * @author Juergen Hoeller
* @author Juergen Hoeller * @since 2.5
* @since 2.5 */
*/ public class MockBodyContent extends BodyContent {
public class MockBodyContent extends BodyContent {
private final String content;
private final String content;
/**
/** * Create a MockBodyContent for the given response.
* Create a MockBodyContent for the given response. * @param content the body content to expose
* @param content the body content to expose * @param response the servlet response to wrap
* @param response the servlet response to wrap */
*/ public MockBodyContent(String content, HttpServletResponse response) {
public MockBodyContent(String content, HttpServletResponse response) { this(content, response, null);
this(content, response, null); }
}
/**
/** * Create a MockBodyContent for the given response.
* Create a MockBodyContent for the given response. * @param content the body content to expose
* @param content the body content to expose * @param targetWriter the target Writer to wrap
* @param targetWriter the target Writer to wrap */
*/ public MockBodyContent(String content, Writer targetWriter) {
public MockBodyContent(String content, Writer targetWriter) { this(content, null, targetWriter);
this(content, null, targetWriter); }
}
/**
/** * Create a MockBodyContent for the given response.
* Create a MockBodyContent for the given response. * @param content the body content to expose
* @param content the body content to expose * @param response the servlet response to wrap
* @param response the servlet response to wrap * @param targetWriter the target Writer to wrap
* @param targetWriter the target Writer to wrap */
*/ public MockBodyContent(String content, HttpServletResponse response, Writer targetWriter) {
public MockBodyContent(String content, HttpServletResponse response, Writer targetWriter) { super(adaptJspWriter(targetWriter, response));
super(adaptJspWriter(targetWriter, response)); this.content = content;
this.content = content; }
}
private static JspWriter adaptJspWriter(Writer targetWriter, HttpServletResponse response) {
private static JspWriter adaptJspWriter(Writer targetWriter, HttpServletResponse response) { if (targetWriter instanceof JspWriter) {
if (targetWriter instanceof JspWriter) { return (JspWriter) targetWriter;
return (JspWriter) targetWriter; }
} else {
else { return new MockJspWriter(response, targetWriter);
return new MockJspWriter(response, targetWriter); }
} }
}
public Reader getReader() {
public Reader getReader() { return new StringReader(this.content);
return new StringReader(this.content); }
}
public String getString() {
public String getString() { return this.content;
return this.content; }
}
public void writeOut(Writer writer) throws IOException {
public void writeOut(Writer writer) throws IOException { writer.write(this.content);
writer.write(this.content); }
}
//---------------------------------------------------------------------
//--------------------------------------------------------------------- // Delegating implementations of JspWriter's abstract methods
// Delegating implementations of JspWriter's abstract methods //---------------------------------------------------------------------
//---------------------------------------------------------------------
public void clear() throws IOException {
public void clear() throws IOException { getEnclosingWriter().clear();
getEnclosingWriter().clear(); }
}
public void clearBuffer() throws IOException {
public void clearBuffer() throws IOException { getEnclosingWriter().clearBuffer();
getEnclosingWriter().clearBuffer(); }
}
public void close() throws IOException {
public void close() throws IOException { getEnclosingWriter().close();
getEnclosingWriter().close(); }
}
public int getRemaining() {
public int getRemaining() { return getEnclosingWriter().getRemaining();
return getEnclosingWriter().getRemaining(); }
}
public void newLine() throws IOException {
public void newLine() throws IOException { getEnclosingWriter().println();
getEnclosingWriter().println(); }
}
public void write(char value[], int offset, int length) throws IOException {
public void write(char value[], int offset, int length) throws IOException { getEnclosingWriter().write(value, offset, length);
getEnclosingWriter().write(value, offset, length); }
}
public void print(boolean value) throws IOException {
public void print(boolean value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(char value) throws IOException {
public void print(char value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(char[] value) throws IOException {
public void print(char[] value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(double value) throws IOException {
public void print(double value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(float value) throws IOException {
public void print(float value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(int value) throws IOException {
public void print(int value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(long value) throws IOException {
public void print(long value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(Object value) throws IOException {
public void print(Object value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void print(String value) throws IOException {
public void print(String value) throws IOException { getEnclosingWriter().print(value);
getEnclosingWriter().print(value); }
}
public void println() throws IOException {
public void println() throws IOException { getEnclosingWriter().println();
getEnclosingWriter().println(); }
}
public void println(boolean value) throws IOException {
public void println(boolean value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(char value) throws IOException {
public void println(char value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(char[] value) throws IOException {
public void println(char[] value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(double value) throws IOException {
public void println(double value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(float value) throws IOException {
public void println(float value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(int value) throws IOException {
public void println(int value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(long value) throws IOException {
public void println(long value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(Object value) throws IOException {
public void println(Object value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
public void println(String value) throws IOException {
public void println(String value) throws IOException { getEnclosingWriter().println(value);
getEnclosingWriter().println(value); }
}
}
}

View File

@ -1,92 +1,92 @@
/* /*
* Copyright 2002-2006 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext; import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.el.ELException; import javax.servlet.jsp.el.ELException;
import javax.servlet.jsp.el.Expression; import javax.servlet.jsp.el.Expression;
import javax.servlet.jsp.el.ExpressionEvaluator; import javax.servlet.jsp.el.ExpressionEvaluator;
import javax.servlet.jsp.el.FunctionMapper; import javax.servlet.jsp.el.FunctionMapper;
import javax.servlet.jsp.el.VariableResolver; import javax.servlet.jsp.el.VariableResolver;
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
/** /**
* Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator} * Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator}
* interface, delegating to the Jakarta JSTL ExpressionEvaluatorManager. * interface, delegating to the Jakarta JSTL ExpressionEvaluatorManager.
* *
* <p>Used for testing the web framework; only necessary for testing * <p>Used for testing the web framework; only necessary for testing
* applications when testing custom JSP tags. * applications when testing custom JSP tags.
* *
* <p>Note that the Jakarta JSTL implementation (jstl.jar, standard.jar) * <p>Note that the Jakarta JSTL implementation (jstl.jar, standard.jar)
* has to be available on the class path to use this expression evaluator. * has to be available on the class path to use this expression evaluator.
* *
* @author Juergen Hoeller * @author Juergen Hoeller
* @since 1.1.5 * @since 1.1.5
* @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager * @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager
*/ */
public class MockExpressionEvaluator extends ExpressionEvaluator { public class MockExpressionEvaluator extends ExpressionEvaluator {
private final PageContext pageContext; private final PageContext pageContext;
/** /**
* Create a new MockExpressionEvaluator for the given PageContext. * Create a new MockExpressionEvaluator for the given PageContext.
* @param pageContext the JSP PageContext to run in * @param pageContext the JSP PageContext to run in
*/ */
public MockExpressionEvaluator(PageContext pageContext) { public MockExpressionEvaluator(PageContext pageContext) {
this.pageContext = pageContext; this.pageContext = pageContext;
} }
public Expression parseExpression( public Expression parseExpression(
final String expression, final Class expectedType, final FunctionMapper functionMapper) final String expression, final Class expectedType, final FunctionMapper functionMapper)
throws ELException { throws ELException {
return new Expression() { return new Expression() {
public Object evaluate(VariableResolver variableResolver) throws ELException { public Object evaluate(VariableResolver variableResolver) throws ELException {
return doEvaluate(expression, expectedType, functionMapper); return doEvaluate(expression, expectedType, functionMapper);
} }
}; };
} }
public Object evaluate( public Object evaluate(
String expression, Class expectedType, VariableResolver variableResolver, FunctionMapper functionMapper) String expression, Class expectedType, VariableResolver variableResolver, FunctionMapper functionMapper)
throws ELException { throws ELException {
if (variableResolver != null) { if (variableResolver != null) {
throw new IllegalArgumentException("Custom VariableResolver not supported"); throw new IllegalArgumentException("Custom VariableResolver not supported");
} }
return doEvaluate(expression, expectedType, functionMapper); return doEvaluate(expression, expectedType, functionMapper);
} }
protected Object doEvaluate( protected Object doEvaluate(
String expression, Class expectedType, FunctionMapper functionMapper) String expression, Class expectedType, FunctionMapper functionMapper)
throws ELException { throws ELException {
if (functionMapper != null) { if (functionMapper != null) {
throw new IllegalArgumentException("Custom FunctionMapper not supported"); throw new IllegalArgumentException("Custom FunctionMapper not supported");
} }
try { try {
return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext); return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext);
} }
catch (JspException ex) { catch (JspException ex) {
throw new ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex); throw new ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex);
} }
} }
} }

View File

@ -0,0 +1,70 @@
/*
* Copyright 2002-2009 the original author or authors.
*
* Licensed 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.springframework.mock.web;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.util.Assert;
/**
* Mock implementation of the {@link javax.servlet.FilterConfig} interface.
*
* <p>Used for testing the web framework; also usefol for testing
* custom {@link javax.servlet.Filter} implementations.
*
* @author Juergen Hoeller
* @since 2.0.3
* @see MockFilterConfig
* @see PassThroughFilterChain
*/
public class MockFilterChain implements FilterChain {
private ServletRequest request;
private ServletResponse response;
/**
* Records the request and response.
*/
public void doFilter(ServletRequest request, ServletResponse response) {
Assert.notNull(request, "Request must not be null");
Assert.notNull(response, "Response must not be null");
if (this.request != null) {
throw new IllegalStateException("This FilterChain has already been called!");
}
this.request = request;
this.response = response;
}
/**
* Return the request that {@link #doFilter} has been called with.
*/
public ServletRequest getRequest() {
return this.request;
}
/**
* Return the response that {@link #doFilter} has been called with.
*/
public ServletResponse getResponse() {
return this.response;
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2008 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,12 +16,10 @@
package org.springframework.mock.web; package org.springframework.mock.web;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Enumeration;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.FilterConfig; import javax.servlet.FilterConfig;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;

View File

@ -1,245 +1,246 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.Serializable; import java.io.Serializable;
import java.util.Enumeration; import java.util.Collections;
import java.util.HashMap; import java.util.Enumeration;
import java.util.Hashtable; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener; import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionContext; import javax.servlet.http.HttpSessionContext;
import org.springframework.util.Assert; import org.springframework.util.Assert;
/** /**
* Mock implementation of the {@link javax.servlet.http.HttpSession} interface. * Mock implementation of the {@link javax.servlet.http.HttpSession} interface.
* Supports the Servlet 2.4 API level. * Supports the Servlet 2.4 API level.
* *
* <p>Used for testing the web framework; also useful for testing * <p>Used for testing the web framework; also useful for testing
* application controllers. * application controllers.
* *
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Rod Johnson * @author Rod Johnson
* @author Mark Fisher * @author Mark Fisher
* @since 1.0.2 * @since 1.0.2
*/ */
public class MockHttpSession implements HttpSession { public class MockHttpSession implements HttpSession {
public static final String SESSION_COOKIE_NAME = "JSESSION"; public static final String SESSION_COOKIE_NAME = "JSESSION";
private static int nextId = 1; private static int nextId = 1;
private final String id; private final String id;
private final long creationTime = System.currentTimeMillis(); private final long creationTime = System.currentTimeMillis();
private int maxInactiveInterval; private int maxInactiveInterval;
private long lastAccessedTime = System.currentTimeMillis(); private long lastAccessedTime = System.currentTimeMillis();
private final ServletContext servletContext; private final ServletContext servletContext;
private final Hashtable attributes = new Hashtable(); private final Map<String, Object> attributes = new LinkedHashMap<String, Object>();
private boolean invalid = false; private boolean invalid = false;
private boolean isNew = true; private boolean isNew = true;
/** /**
* Create a new MockHttpSession with a default {@link org.springframework.mock.web.MockServletContext}. * Create a new MockHttpSession with a default {@link MockServletContext}.
* @see org.springframework.mock.web.MockServletContext * @see MockServletContext
*/ */
public MockHttpSession() { public MockHttpSession() {
this(null); this(null);
} }
/** /**
* Create a new MockHttpSession. * Create a new MockHttpSession.
* @param servletContext the ServletContext that the session runs in * @param servletContext the ServletContext that the session runs in
*/ */
public MockHttpSession(ServletContext servletContext) { public MockHttpSession(ServletContext servletContext) {
this(servletContext, null); this(servletContext, null);
} }
/** /**
* Create a new MockHttpSession. * Create a new MockHttpSession.
* @param servletContext the ServletContext that the session runs in * @param servletContext the ServletContext that the session runs in
* @param id a unique identifier for this session * @param id a unique identifier for this session
*/ */
public MockHttpSession(ServletContext servletContext, String id) { public MockHttpSession(ServletContext servletContext, String id) {
this.servletContext = (servletContext != null ? servletContext : new MockServletContext()); this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
this.id = (id != null ? id : Integer.toString(nextId++)); this.id = (id != null ? id : Integer.toString(nextId++));
} }
public long getCreationTime() { public long getCreationTime() {
return this.creationTime; return this.creationTime;
} }
public String getId() { public String getId() {
return this.id; return this.id;
} }
public void access() { public void access() {
this.lastAccessedTime = System.currentTimeMillis(); this.lastAccessedTime = System.currentTimeMillis();
this.isNew = false; this.isNew = false;
} }
public long getLastAccessedTime() { public long getLastAccessedTime() {
return this.lastAccessedTime; return this.lastAccessedTime;
} }
public ServletContext getServletContext() { public ServletContext getServletContext() {
return this.servletContext; return this.servletContext;
} }
public void setMaxInactiveInterval(int interval) { public void setMaxInactiveInterval(int interval) {
this.maxInactiveInterval = interval; this.maxInactiveInterval = interval;
} }
public int getMaxInactiveInterval() { public int getMaxInactiveInterval() {
return this.maxInactiveInterval; return this.maxInactiveInterval;
} }
public HttpSessionContext getSessionContext() { public HttpSessionContext getSessionContext() {
throw new UnsupportedOperationException("getSessionContext"); throw new UnsupportedOperationException("getSessionContext");
} }
public Object getAttribute(String name) { public Object getAttribute(String name) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
return this.attributes.get(name); return this.attributes.get(name);
} }
public Object getValue(String name) { public Object getValue(String name) {
return getAttribute(name); return getAttribute(name);
} }
public Enumeration getAttributeNames() { public Enumeration<String> getAttributeNames() {
return this.attributes.keys(); return Collections.enumeration(this.attributes.keySet());
} }
public String[] getValueNames() { public String[] getValueNames() {
return (String[]) this.attributes.keySet().toArray(new String[this.attributes.size()]); return this.attributes.keySet().toArray(new String[this.attributes.size()]);
} }
public void setAttribute(String name, Object value) { public void setAttribute(String name, Object value) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
if (value != null) { if (value != null) {
this.attributes.put(name, value); this.attributes.put(name, value);
if (value instanceof HttpSessionBindingListener) { if (value instanceof HttpSessionBindingListener) {
((HttpSessionBindingListener) value).valueBound(new HttpSessionBindingEvent(this, name, value)); ((HttpSessionBindingListener) value).valueBound(new HttpSessionBindingEvent(this, name, value));
} }
} }
else { else {
removeAttribute(name); removeAttribute(name);
} }
} }
public void putValue(String name, Object value) { public void putValue(String name, Object value) {
setAttribute(name, value); setAttribute(name, value);
} }
public void removeAttribute(String name) { public void removeAttribute(String name) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
Object value = this.attributes.remove(name); Object value = this.attributes.remove(name);
if (value instanceof HttpSessionBindingListener) { if (value instanceof HttpSessionBindingListener) {
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value)); ((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
} }
} }
public void removeValue(String name) { public void removeValue(String name) {
removeAttribute(name); removeAttribute(name);
} }
/** /**
* Clear all of this session's attributes. * Clear all of this session's attributes.
*/ */
public void clearAttributes() { public void clearAttributes() {
for (Iterator it = this.attributes.entrySet().iterator(); it.hasNext();) { for (Iterator<Map.Entry<String, Object>> it = this.attributes.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next(); Map.Entry<String, Object> entry = it.next();
String name = (String) entry.getKey(); String name = entry.getKey();
Object value = entry.getValue(); Object value = entry.getValue();
it.remove(); it.remove();
if (value instanceof HttpSessionBindingListener) { if (value instanceof HttpSessionBindingListener) {
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value)); ((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
} }
} }
} }
public void invalidate() { public void invalidate() {
this.invalid = true; this.invalid = true;
clearAttributes(); clearAttributes();
} }
public boolean isInvalid() { public boolean isInvalid() {
return this.invalid; return this.invalid;
} }
public void setNew(boolean value) { public void setNew(boolean value) {
this.isNew = value; this.isNew = value;
} }
public boolean isNew() { public boolean isNew() {
return this.isNew; return this.isNew;
} }
/** /**
* Serialize the attributes of this session into an object that can * Serialize the attributes of this session into an object that can
* be turned into a byte array with standard Java serialization. * be turned into a byte array with standard Java serialization.
* @return a representation of this session's serialized state * @return a representation of this session's serialized state
*/ */
public Serializable serializeState() { public Serializable serializeState() {
HashMap state = new HashMap(); HashMap<String, Serializable> state = new HashMap<String, Serializable>();
for (Iterator it = this.attributes.entrySet().iterator(); it.hasNext();) { for (Iterator<Map.Entry<String, Object>> it = this.attributes.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next(); Map.Entry<String, Object> entry = it.next();
String name = (String) entry.getKey(); String name = entry.getKey();
Object value = entry.getValue(); Object value = entry.getValue();
it.remove(); it.remove();
if (value instanceof Serializable) { if (value instanceof Serializable) {
state.put(name, value); state.put(name, (Serializable) value);
} }
else { else {
// Not serializable... Servlet containers usually automatically // Not serializable... Servlet containers usually automatically
// unbind the attribute in this case. // unbind the attribute in this case.
if (value instanceof HttpSessionBindingListener) { if (value instanceof HttpSessionBindingListener) {
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value)); ((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
} }
} }
} }
return state; return state;
} }
/** /**
* Deserialize the attributes of this session from a state object * Deserialize the attributes of this session from a state object
* created by {@link #serializeState()}. * created by {@link #serializeState()}.
* @param state a representation of this session's serialized state * @param state a representation of this session's serialized state
*/ */
public void deserializeState(Serializable state) { @SuppressWarnings("unchecked")
Assert.isTrue(state instanceof Map, "Serialized state needs to be of type [java.util.Map]"); public void deserializeState(Serializable state) {
this.attributes.putAll((Map) state); Assert.isTrue(state instanceof Map, "Serialized state needs to be of type [java.util.Map]");
} this.attributes.putAll((Map<String, Object>) state);
}
}
}

View File

@ -1,192 +1,191 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.Writer; import java.io.Writer;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspWriter;
/**
/** * Mock implementation of the {@link javax.servlet.jsp.JspWriter} class.
* Mock implementation of the {@link javax.servlet.jsp.JspWriter} class. *
* * <p>Used for testing the web framework; only necessary for testing
* <p>Used for testing the web framework; only necessary for testing * applications when testing custom JSP tags.
* applications when testing custom JSP tags. *
* * @author Juergen Hoeller
* @author Juergen Hoeller * @since 2.5
* @since 2.5 */
*/ public class MockJspWriter extends JspWriter {
public class MockJspWriter extends JspWriter {
private final HttpServletResponse response;
private final HttpServletResponse response;
private PrintWriter targetWriter;
private PrintWriter targetWriter;
/**
/** * Create a MockJspWriter for the given response,
* Create a MockJspWriter for the given response, * using the response's default Writer.
* using the response's default Writer. * @param response the servlet response to wrap
* @param response the servlet response to wrap */
*/ public MockJspWriter(HttpServletResponse response) {
public MockJspWriter(HttpServletResponse response) { this(response, null);
this(response, null); }
}
/**
/** * Create a MockJspWriter for the given plain Writer.
* Create a MockJspWriter for the given plain Writer. * @param targetWriter the target Writer to wrap
* @param targetWriter the target Writer to wrap */
*/ public MockJspWriter(Writer targetWriter) {
public MockJspWriter(Writer targetWriter) { this(null, targetWriter);
this(null, targetWriter); }
}
/**
/** * Create a MockJspWriter for the given response.
* Create a MockJspWriter for the given response. * @param response the servlet response to wrap
* @param response the servlet response to wrap * @param targetWriter the target Writer to wrap
* @param targetWriter the target Writer to wrap */
*/ public MockJspWriter(HttpServletResponse response, Writer targetWriter) {
public MockJspWriter(HttpServletResponse response, Writer targetWriter) { super(DEFAULT_BUFFER, true);
super(DEFAULT_BUFFER, true); this.response = (response != null ? response : new MockHttpServletResponse());
this.response = (response != null ? response : new MockHttpServletResponse()); if (targetWriter instanceof PrintWriter) {
if (targetWriter instanceof PrintWriter) { this.targetWriter = (PrintWriter) targetWriter;
this.targetWriter = (PrintWriter) targetWriter; }
} else if (targetWriter != null) {
else if (targetWriter != null) { this.targetWriter = new PrintWriter(targetWriter);
this.targetWriter = new PrintWriter(targetWriter); }
} }
}
/**
/** * Lazily initialize the target Writer.
* Lazily initialize the target Writer. */
*/ protected PrintWriter getTargetWriter() throws IOException {
protected PrintWriter getTargetWriter() throws IOException { if (this.targetWriter == null) {
if (this.targetWriter == null) { this.targetWriter = this.response.getWriter();
this.targetWriter = this.response.getWriter(); }
} return this.targetWriter;
return this.targetWriter; }
}
public void clear() throws IOException {
public void clear() throws IOException { if (this.response.isCommitted()) {
if (this.response.isCommitted()) { throw new IOException("Response already committed");
throw new IOException("Response already committed"); }
} this.response.resetBuffer();
this.response.resetBuffer(); }
}
public void clearBuffer() throws IOException {
public void clearBuffer() throws IOException { }
}
public void flush() throws IOException {
public void flush() throws IOException { this.response.flushBuffer();
this.response.flushBuffer(); }
}
public void close() throws IOException {
public void close() throws IOException { flush();
flush(); }
}
public int getRemaining() {
public int getRemaining() { return Integer.MAX_VALUE;
return Integer.MAX_VALUE; }
}
public void newLine() throws IOException {
public void newLine() throws IOException { getTargetWriter().println();
getTargetWriter().println(); }
}
public void write(char value[], int offset, int length) throws IOException {
public void write(char value[], int offset, int length) throws IOException { getTargetWriter().write(value, offset, length);
getTargetWriter().write(value, offset, length); }
}
public void print(boolean value) throws IOException {
public void print(boolean value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(char value) throws IOException {
public void print(char value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(char[] value) throws IOException {
public void print(char[] value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(double value) throws IOException {
public void print(double value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(float value) throws IOException {
public void print(float value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(int value) throws IOException {
public void print(int value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(long value) throws IOException {
public void print(long value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(Object value) throws IOException {
public void print(Object value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void print(String value) throws IOException {
public void print(String value) throws IOException { getTargetWriter().print(value);
getTargetWriter().print(value); }
}
public void println() throws IOException {
public void println() throws IOException { getTargetWriter().println();
getTargetWriter().println(); }
}
public void println(boolean value) throws IOException {
public void println(boolean value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(char value) throws IOException {
public void println(char value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(char[] value) throws IOException {
public void println(char[] value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(double value) throws IOException {
public void println(double value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(float value) throws IOException {
public void println(float value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(int value) throws IOException {
public void println(int value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(long value) throws IOException {
public void println(long value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(Object value) throws IOException {
public void println(Object value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
public void println(String value) throws IOException {
public void println(String value) throws IOException { getTargetWriter().println(value);
getTargetWriter().println(value); }
}
}
}

View File

@ -0,0 +1,132 @@
/*
* Copyright 2002-2009 the original author or authors.
*
* Licensed 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.springframework.mock.web;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.util.Assert;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
/**
* Mock implementation of the {@link org.springframework.web.multipart.MultipartFile}
* interface.
*
* <p>Useful in conjunction with a {@link MockMultipartHttpServletRequest}
* for testing application controllers that access multipart uploads.
*
* @author Juergen Hoeller
* @author Eric Crampton
* @since 2.0
* @see MockMultipartHttpServletRequest
*/
public class MockMultipartFile implements MultipartFile {
private final String name;
private String originalFilename;
private String contentType;
private final byte[] content;
/**
* Create a new MockMultipartFile with the given content.
* @param name the name of the file
* @param content the content of the file
*/
public MockMultipartFile(String name, byte[] content) {
this(name, "", null, content);
}
/**
* Create a new MockMultipartFile with the given content.
* @param name the name of the file
* @param contentStream the content of the file as stream
* @throws IOException if reading from the stream failed
*/
public MockMultipartFile(String name, InputStream contentStream) throws IOException {
this(name, "", null, FileCopyUtils.copyToByteArray(contentStream));
}
/**
* Create a new MockMultipartFile with the given content.
* @param name the name of the file
* @param originalFilename the original filename (as on the client's machine)
* @param contentType the content type (if known)
* @param content the content of the file
*/
public MockMultipartFile(String name, String originalFilename, String contentType, byte[] content) {
Assert.hasLength(name, "Name must not be null");
this.name = name;
this.originalFilename = (originalFilename != null ? originalFilename : "");
this.contentType = contentType;
this.content = (content != null ? content : new byte[0]);
}
/**
* Create a new MockMultipartFile with the given content.
* @param name the name of the file
* @param originalFilename the original filename (as on the client's machine)
* @param contentType the content type (if known)
* @param contentStream the content of the file as stream
* @throws IOException if reading from the stream failed
*/
public MockMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream)
throws IOException {
this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
}
public String getName() {
return this.name;
}
public String getOriginalFilename() {
return this.originalFilename;
}
public String getContentType() {
return this.contentType;
}
public boolean isEmpty() {
return (this.content.length == 0);
}
public long getSize() {
return this.content.length;
}
public byte[] getBytes() throws IOException {
return this.content;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(this.content);
}
public void transferTo(File dest) throws IOException, IllegalStateException {
FileCopyUtils.copy(this.content, dest);
}
}

View File

@ -0,0 +1,68 @@
/*
* Copyright 2002-2009 the original author or authors.
*
* Licensed 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.springframework.mock.web;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
* Mock implementation of the
* {@link org.springframework.web.multipart.MultipartHttpServletRequest} interface.
*
* <p>Useful for testing application controllers that access multipart uploads.
* The {@link MockMultipartFile} can be used to populate these mock requests
* with files.
*
* @author Juergen Hoeller
* @author Eric Crampton
* @since 2.0
* @see MockMultipartFile
*/
public class MockMultipartHttpServletRequest extends MockHttpServletRequest implements MultipartHttpServletRequest {
private final Map<String, MultipartFile> multipartFiles = new LinkedHashMap<String, MultipartFile>();
/**
* Add a file to this request. The parameter name from the multipart
* form is taken from the {@link MultipartFile#getName()}.
* @param file multipart file to be added
*/
public void addFile(MultipartFile file) {
Assert.notNull(file, "MultipartFile must not be null");
this.multipartFiles.put(file.getName(), file);
}
public Iterator<String> getFileNames() {
return getFileMap().keySet().iterator();
}
public MultipartFile getFile(String name) {
return this.multipartFiles.get(name);
}
public Map<String, MultipartFile> getFileMap() {
return Collections.unmodifiableMap(this.multipartFiles);
}
}

View File

@ -1,337 +1,337 @@
/* /*
* Copyright 2002-2009 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import javax.el.ELContext; import javax.el.ELContext;
import javax.servlet.Servlet; import javax.servlet.Servlet;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext; import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.el.ExpressionEvaluator; import javax.servlet.jsp.el.ExpressionEvaluator;
import javax.servlet.jsp.el.VariableResolver; import javax.servlet.jsp.el.VariableResolver;
import org.springframework.util.Assert; import org.springframework.util.Assert;
/** /**
* Mock implementation of the {@link javax.servlet.jsp.PageContext} interface. * Mock implementation of the {@link javax.servlet.jsp.PageContext} interface.
* *
* <p>Used for testing the web framework; only necessary for testing * <p>Used for testing the web framework; only necessary for testing
* applications when testing custom JSP tags. * applications when testing custom JSP tags.
* *
* <p>Note: Expects initialization via the constructor rather than via the * <p>Note: Expects initialization via the constructor rather than via the
* <code>PageContext.initialize</code> method. Does not support writing to * <code>PageContext.initialize</code> method. Does not support writing to
* a JspWriter, request dispatching, and <code>handlePageException</code> calls. * a JspWriter, request dispatching, and <code>handlePageException</code> calls.
* *
* @author Juergen Hoeller * @author Juergen Hoeller
* @since 1.0.2 * @since 1.0.2
*/ */
public class MockPageContext extends PageContext { public class MockPageContext extends PageContext {
private final ServletContext servletContext; private final ServletContext servletContext;
private final HttpServletRequest request; private final HttpServletRequest request;
private final HttpServletResponse response; private final HttpServletResponse response;
private final ServletConfig servletConfig; private final ServletConfig servletConfig;
private final Map<String, Object> attributes = new HashMap<String, Object>(); private final Map<String, Object> attributes = new LinkedHashMap<String, Object>();
private JspWriter out; private JspWriter out;
/** /**
* Create new MockPageContext with a default {@link MockServletContext}, * Create new MockPageContext with a default {@link MockServletContext},
* {@link MockHttpServletRequest}, {@link MockHttpServletResponse}, * {@link MockHttpServletRequest}, {@link MockHttpServletResponse},
* {@link MockServletConfig}. * {@link MockServletConfig}.
*/ */
public MockPageContext() { public MockPageContext() {
this(null, null, null, null); this(null, null, null, null);
} }
/** /**
* Create new MockPageContext with a default {@link MockHttpServletRequest}, * Create new MockPageContext with a default {@link MockHttpServletRequest},
* {@link MockHttpServletResponse}, {@link MockServletConfig}. * {@link MockHttpServletResponse}, {@link MockServletConfig}.
* @param servletContext the ServletContext that the JSP page runs in * @param servletContext the ServletContext that the JSP page runs in
* (only necessary when actually accessing the ServletContext) * (only necessary when actually accessing the ServletContext)
*/ */
public MockPageContext(ServletContext servletContext) { public MockPageContext(ServletContext servletContext) {
this(servletContext, null, null, null); this(servletContext, null, null, null);
} }
/** /**
* Create new MockPageContext with a MockHttpServletResponse, * Create new MockPageContext with a MockHttpServletResponse,
* MockServletConfig. * MockServletConfig.
* @param servletContext the ServletContext that the JSP page runs in * @param servletContext the ServletContext that the JSP page runs in
* @param request the current HttpServletRequest * @param request the current HttpServletRequest
* (only necessary when actually accessing the request) * (only necessary when actually accessing the request)
*/ */
public MockPageContext(ServletContext servletContext, HttpServletRequest request) { public MockPageContext(ServletContext servletContext, HttpServletRequest request) {
this(servletContext, request, null, null); this(servletContext, request, null, null);
} }
/** /**
* Create new MockPageContext with a MockServletConfig. * Create new MockPageContext with a MockServletConfig.
* @param servletContext the ServletContext that the JSP page runs in * @param servletContext the ServletContext that the JSP page runs in
* @param request the current HttpServletRequest * @param request the current HttpServletRequest
* @param response the current HttpServletResponse * @param response the current HttpServletResponse
* (only necessary when actually writing to the response) * (only necessary when actually writing to the response)
*/ */
public MockPageContext(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) { public MockPageContext(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) {
this(servletContext, request, response, null); this(servletContext, request, response, null);
} }
/** /**
* Create new MockServletConfig. * Create new MockServletConfig.
* @param servletContext the ServletContext that the JSP page runs in * @param servletContext the ServletContext that the JSP page runs in
* @param request the current HttpServletRequest * @param request the current HttpServletRequest
* @param response the current HttpServletResponse * @param response the current HttpServletResponse
* @param servletConfig the ServletConfig (hardly ever accessed from within a tag) * @param servletConfig the ServletConfig (hardly ever accessed from within a tag)
*/ */
public MockPageContext(ServletContext servletContext, HttpServletRequest request, public MockPageContext(ServletContext servletContext, HttpServletRequest request,
HttpServletResponse response, ServletConfig servletConfig) { HttpServletResponse response, ServletConfig servletConfig) {
this.servletContext = (servletContext != null ? servletContext : new MockServletContext()); this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
this.request = (request != null ? request : new MockHttpServletRequest(servletContext)); this.request = (request != null ? request : new MockHttpServletRequest(servletContext));
this.response = (response != null ? response : new MockHttpServletResponse()); this.response = (response != null ? response : new MockHttpServletResponse());
this.servletConfig = (servletConfig != null ? servletConfig : new MockServletConfig(servletContext)); this.servletConfig = (servletConfig != null ? servletConfig : new MockServletConfig(servletContext));
} }
public void initialize( public void initialize(
Servlet servlet, ServletRequest request, ServletResponse response, Servlet servlet, ServletRequest request, ServletResponse response,
String errorPageURL, boolean needsSession, int bufferSize, boolean autoFlush) { String errorPageURL, boolean needsSession, int bufferSize, boolean autoFlush) {
throw new UnsupportedOperationException("Use appropriate constructor"); throw new UnsupportedOperationException("Use appropriate constructor");
} }
public void release() { public void release() {
} }
public void setAttribute(String name, Object value) { public void setAttribute(String name, Object value) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
if (value != null) { if (value != null) {
this.attributes.put(name, value); this.attributes.put(name, value);
} }
else { else {
this.attributes.remove(name); this.attributes.remove(name);
} }
} }
public void setAttribute(String name, Object value, int scope) { public void setAttribute(String name, Object value, int scope) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
switch (scope) { switch (scope) {
case PAGE_SCOPE: case PAGE_SCOPE:
setAttribute(name, value); setAttribute(name, value);
break; break;
case REQUEST_SCOPE: case REQUEST_SCOPE:
this.request.setAttribute(name, value); this.request.setAttribute(name, value);
break; break;
case SESSION_SCOPE: case SESSION_SCOPE:
this.request.getSession().setAttribute(name, value); this.request.getSession().setAttribute(name, value);
break; break;
case APPLICATION_SCOPE: case APPLICATION_SCOPE:
this.servletContext.setAttribute(name, value); this.servletContext.setAttribute(name, value);
break; break;
default: default:
throw new IllegalArgumentException("Invalid scope: " + scope); throw new IllegalArgumentException("Invalid scope: " + scope);
} }
} }
public Object getAttribute(String name) { public Object getAttribute(String name) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
return this.attributes.get(name); return this.attributes.get(name);
} }
public Object getAttribute(String name, int scope) { public Object getAttribute(String name, int scope) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
switch (scope) { switch (scope) {
case PAGE_SCOPE: case PAGE_SCOPE:
return getAttribute(name); return getAttribute(name);
case REQUEST_SCOPE: case REQUEST_SCOPE:
return this.request.getAttribute(name); return this.request.getAttribute(name);
case SESSION_SCOPE: case SESSION_SCOPE:
HttpSession session = this.request.getSession(false); HttpSession session = this.request.getSession(false);
return (session != null ? session.getAttribute(name) : null); return (session != null ? session.getAttribute(name) : null);
case APPLICATION_SCOPE: case APPLICATION_SCOPE:
return this.servletContext.getAttribute(name); return this.servletContext.getAttribute(name);
default: default:
throw new IllegalArgumentException("Invalid scope: " + scope); throw new IllegalArgumentException("Invalid scope: " + scope);
} }
} }
public Object findAttribute(String name) { public Object findAttribute(String name) {
Object value = getAttribute(name); Object value = getAttribute(name);
if (value == null) { if (value == null) {
value = getAttribute(name, REQUEST_SCOPE); value = getAttribute(name, REQUEST_SCOPE);
if (value == null) { if (value == null) {
value = getAttribute(name, SESSION_SCOPE); value = getAttribute(name, SESSION_SCOPE);
if (value == null) { if (value == null) {
value = getAttribute(name, APPLICATION_SCOPE); value = getAttribute(name, APPLICATION_SCOPE);
} }
} }
} }
return value; return value;
} }
public void removeAttribute(String name) { public void removeAttribute(String name) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
this.removeAttribute(name, PageContext.PAGE_SCOPE); this.removeAttribute(name, PageContext.PAGE_SCOPE);
this.removeAttribute(name, PageContext.REQUEST_SCOPE); this.removeAttribute(name, PageContext.REQUEST_SCOPE);
this.removeAttribute(name, PageContext.SESSION_SCOPE); this.removeAttribute(name, PageContext.SESSION_SCOPE);
this.removeAttribute(name, PageContext.APPLICATION_SCOPE); this.removeAttribute(name, PageContext.APPLICATION_SCOPE);
} }
public void removeAttribute(String name, int scope) { public void removeAttribute(String name, int scope) {
Assert.notNull(name, "Attribute name must not be null"); Assert.notNull(name, "Attribute name must not be null");
switch (scope) { switch (scope) {
case PAGE_SCOPE: case PAGE_SCOPE:
this.attributes.remove(name); this.attributes.remove(name);
break; break;
case REQUEST_SCOPE: case REQUEST_SCOPE:
this.request.removeAttribute(name); this.request.removeAttribute(name);
break; break;
case SESSION_SCOPE: case SESSION_SCOPE:
this.request.getSession().removeAttribute(name); this.request.getSession().removeAttribute(name);
break; break;
case APPLICATION_SCOPE: case APPLICATION_SCOPE:
this.servletContext.removeAttribute(name); this.servletContext.removeAttribute(name);
break; break;
default: default:
throw new IllegalArgumentException("Invalid scope: " + scope); throw new IllegalArgumentException("Invalid scope: " + scope);
} }
} }
public int getAttributesScope(String name) { public int getAttributesScope(String name) {
if (getAttribute(name) != null) { if (getAttribute(name) != null) {
return PAGE_SCOPE; return PAGE_SCOPE;
} }
else if (getAttribute(name, REQUEST_SCOPE) != null) { else if (getAttribute(name, REQUEST_SCOPE) != null) {
return REQUEST_SCOPE; return REQUEST_SCOPE;
} }
else if (getAttribute(name, SESSION_SCOPE) != null) { else if (getAttribute(name, SESSION_SCOPE) != null) {
return SESSION_SCOPE; return SESSION_SCOPE;
} }
else if (getAttribute(name, APPLICATION_SCOPE) != null) { else if (getAttribute(name, APPLICATION_SCOPE) != null) {
return APPLICATION_SCOPE; return APPLICATION_SCOPE;
} }
else { else {
return 0; return 0;
} }
} }
public Enumeration<String> getAttributeNames() { public Enumeration<String> getAttributeNames() {
return Collections.enumeration(this.attributes.keySet()); return Collections.enumeration(this.attributes.keySet());
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Enumeration<String> getAttributeNamesInScope(int scope) { public Enumeration<String> getAttributeNamesInScope(int scope) {
switch (scope) { switch (scope) {
case PAGE_SCOPE: case PAGE_SCOPE:
return getAttributeNames(); return getAttributeNames();
case REQUEST_SCOPE: case REQUEST_SCOPE:
return this.request.getAttributeNames(); return this.request.getAttributeNames();
case SESSION_SCOPE: case SESSION_SCOPE:
HttpSession session = this.request.getSession(false); HttpSession session = this.request.getSession(false);
return (session != null ? session.getAttributeNames() : null); return (session != null ? session.getAttributeNames() : null);
case APPLICATION_SCOPE: case APPLICATION_SCOPE:
return this.servletContext.getAttributeNames(); return this.servletContext.getAttributeNames();
default: default:
throw new IllegalArgumentException("Invalid scope: " + scope); throw new IllegalArgumentException("Invalid scope: " + scope);
} }
} }
public JspWriter getOut() { public JspWriter getOut() {
if (this.out == null) { if (this.out == null) {
this.out = new MockJspWriter(this.response); this.out = new MockJspWriter(this.response);
} }
return this.out; return this.out;
} }
public ExpressionEvaluator getExpressionEvaluator() { public ExpressionEvaluator getExpressionEvaluator() {
return new MockExpressionEvaluator(this); return new MockExpressionEvaluator(this);
} }
public ELContext getELContext() { public ELContext getELContext() {
return null; return null;
} }
public VariableResolver getVariableResolver() { public VariableResolver getVariableResolver() {
return null; return null;
} }
public HttpSession getSession() { public HttpSession getSession() {
return this.request.getSession(); return this.request.getSession();
} }
public Object getPage() { public Object getPage() {
return this; return this;
} }
public ServletRequest getRequest() { public ServletRequest getRequest() {
return this.request; return this.request;
} }
public ServletResponse getResponse() { public ServletResponse getResponse() {
return this.response; return this.response;
} }
public Exception getException() { public Exception getException() {
return null; return null;
} }
public ServletConfig getServletConfig() { public ServletConfig getServletConfig() {
return this.servletConfig; return this.servletConfig;
} }
public ServletContext getServletContext() { public ServletContext getServletContext() {
return this.servletContext; return this.servletContext;
} }
public void forward(String url) throws ServletException, IOException { public void forward(String url) throws ServletException, IOException {
throw new UnsupportedOperationException("forward"); throw new UnsupportedOperationException("forward");
} }
public void include(String url) throws ServletException, IOException { public void include(String url) throws ServletException, IOException {
throw new UnsupportedOperationException("include"); throw new UnsupportedOperationException("include");
} }
public void include(String url, boolean flush) throws ServletException, IOException { public void include(String url, boolean flush) throws ServletException, IOException {
throw new UnsupportedOperationException("include"); throw new UnsupportedOperationException("include");
} }
public void handlePageException(Exception ex) throws ServletException, IOException { public void handlePageException(Exception ex) throws ServletException, IOException {
throw new UnsupportedOperationException("handlePageException"); throw new UnsupportedOperationException("handlePageException");
} }
public void handlePageException(Throwable ex) throws ServletException, IOException { public void handlePageException(Throwable ex) throws ServletException, IOException {
throw new UnsupportedOperationException("handlePageException"); throw new UnsupportedOperationException("handlePageException");
} }
} }

View File

@ -1,91 +1,91 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import javax.servlet.RequestDispatcher; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponseWrapper; import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.util.Assert; import org.springframework.util.Assert;
/** /**
* Mock implementation of the {@link javax.servlet.RequestDispatcher} interface. * Mock implementation of the {@link javax.servlet.RequestDispatcher} interface.
* *
* <p>Used for testing the web framework; typically not necessary for * <p>Used for testing the web framework; typically not necessary for
* testing application controllers. * testing application controllers.
* *
* @author Rod Johnson * @author Rod Johnson
* @author Juergen Hoeller * @author Juergen Hoeller
* @since 1.0.2 * @since 1.0.2
*/ */
public class MockRequestDispatcher implements RequestDispatcher { public class MockRequestDispatcher implements RequestDispatcher {
private final Log logger = LogFactory.getLog(getClass()); private final Log logger = LogFactory.getLog(getClass());
private final String url; private final String url;
/** /**
* Create a new MockRequestDispatcher for the given URL. * Create a new MockRequestDispatcher for the given URL.
* @param url the URL to dispatch to. * @param url the URL to dispatch to.
*/ */
public MockRequestDispatcher(String url) { public MockRequestDispatcher(String url) {
Assert.notNull(url, "URL must not be null"); Assert.notNull(url, "URL must not be null");
this.url = url; this.url = url;
} }
public void forward(ServletRequest request, ServletResponse response) { public void forward(ServletRequest request, ServletResponse response) {
Assert.notNull(request, "Request must not be null"); Assert.notNull(request, "Request must not be null");
Assert.notNull(response, "Response must not be null"); Assert.notNull(response, "Response must not be null");
if (response.isCommitted()) { if (response.isCommitted()) {
throw new IllegalStateException("Cannot perform forward - response is already committed"); throw new IllegalStateException("Cannot perform forward - response is already committed");
} }
getMockHttpServletResponse(response).setForwardedUrl(this.url); getMockHttpServletResponse(response).setForwardedUrl(this.url);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("MockRequestDispatcher: forwarding to URL [" + this.url + "]"); logger.debug("MockRequestDispatcher: forwarding to URL [" + this.url + "]");
} }
} }
public void include(ServletRequest request, ServletResponse response) { public void include(ServletRequest request, ServletResponse response) {
Assert.notNull(request, "Request must not be null"); Assert.notNull(request, "Request must not be null");
Assert.notNull(response, "Response must not be null"); Assert.notNull(response, "Response must not be null");
getMockHttpServletResponse(response).setIncludedUrl(this.url); getMockHttpServletResponse(response).setIncludedUrl(this.url);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("MockRequestDispatcher: including URL [" + this.url + "]"); logger.debug("MockRequestDispatcher: including URL [" + this.url + "]");
} }
} }
/** /**
* Obtain the underlying MockHttpServletResponse, * Obtain the underlying MockHttpServletResponse,
* unwrapping {@link javax.servlet.http.HttpServletResponseWrapper} decorators if necessary. * unwrapping {@link HttpServletResponseWrapper} decorators if necessary.
*/ */
protected MockHttpServletResponse getMockHttpServletResponse(ServletResponse response) { protected MockHttpServletResponse getMockHttpServletResponse(ServletResponse response) {
if (response instanceof MockHttpServletResponse) { if (response instanceof MockHttpServletResponse) {
return (MockHttpServletResponse) response; return (MockHttpServletResponse) response;
} }
if (response instanceof HttpServletResponseWrapper) { if (response instanceof HttpServletResponseWrapper) {
return getMockHttpServletResponse(((HttpServletResponseWrapper) response).getResponse()); return getMockHttpServletResponse(((HttpServletResponseWrapper) response).getResponse());
} }
throw new IllegalArgumentException("MockRequestDispatcher requires MockHttpServletResponse"); throw new IllegalArgumentException("MockRequestDispatcher requires MockHttpServletResponse");
} }
} }

View File

@ -1,102 +1,103 @@
/* /*
* Copyright 2002-2006 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.util.Enumeration; import java.util.Collections;
import java.util.Properties; import java.util.Enumeration;
import java.util.LinkedHashMap;
import javax.servlet.ServletConfig; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import org.springframework.util.Assert;
import org.springframework.util.Assert;
/**
* Mock implementation of the {@link javax.servlet.ServletConfig} interface. /**
* * Mock implementation of the {@link javax.servlet.ServletConfig} interface.
* <p>Used for testing the web framework; typically not necessary for *
* testing application controllers. * <p>Used for testing the web framework; typically not necessary for
* * testing application controllers.
* @author Rod Johnson *
* @author Juergen Hoeller * @author Rod Johnson
* @since 1.0.2 * @author Juergen Hoeller
*/ * @since 1.0.2
public class MockServletConfig implements ServletConfig { */
public class MockServletConfig implements ServletConfig {
private final ServletContext servletContext;
private final ServletContext servletContext;
private final String servletName;
private final String servletName;
private final Properties initParameters = new Properties();
private final Map<String, String> initParameters = new LinkedHashMap<String, String>();
/**
* Create a new MockServletConfig with a default {@link org.springframework.mock.web.MockServletContext}. /**
*/ * Create a new MockServletConfig with a default {@link MockServletContext}.
public MockServletConfig() { */
this(null, ""); public MockServletConfig() {
} this(null, "");
}
/**
* Create a new MockServletConfig with a default {@link org.springframework.mock.web.MockServletContext}. /**
* @param servletName the name of the servlet * Create a new MockServletConfig with a default {@link MockServletContext}.
*/ * @param servletName the name of the servlet
public MockServletConfig(String servletName) { */
this(null, servletName); public MockServletConfig(String servletName) {
} this(null, servletName);
}
/**
* Create a new MockServletConfig. /**
* @param servletContext the ServletContext that the servlet runs in * Create a new MockServletConfig.
*/ * @param servletContext the ServletContext that the servlet runs in
public MockServletConfig(ServletContext servletContext) { */
this(servletContext, ""); public MockServletConfig(ServletContext servletContext) {
} this(servletContext, "");
}
/**
* Create a new MockServletConfig. /**
* @param servletContext the ServletContext that the servlet runs in * Create a new MockServletConfig.
* @param servletName the name of the servlet * @param servletContext the ServletContext that the servlet runs in
*/ * @param servletName the name of the servlet
public MockServletConfig(ServletContext servletContext, String servletName) { */
this.servletContext = (servletContext != null ? servletContext : new MockServletContext()); public MockServletConfig(ServletContext servletContext, String servletName) {
this.servletName = servletName; this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
} this.servletName = servletName;
}
public String getServletName() {
return servletName; public String getServletName() {
} return this.servletName;
}
public ServletContext getServletContext() {
return servletContext; public ServletContext getServletContext() {
} return this.servletContext;
}
public void addInitParameter(String name, String value) {
Assert.notNull(name, "Parameter name must not be null"); public void addInitParameter(String name, String value) {
this.initParameters.setProperty(name, value); Assert.notNull(name, "Parameter name must not be null");
} this.initParameters.put(name, value);
}
public String getInitParameter(String name) {
Assert.notNull(name, "Parameter name must not be null"); public String getInitParameter(String name) {
return this.initParameters.getProperty(name); Assert.notNull(name, "Parameter name must not be null");
} return this.initParameters.get(name);
}
public Enumeration getInitParameterNames() {
return this.initParameters.keys(); public Enumeration<String> getInitParameterNames() {
} return Collections.enumeration(this.initParameters.keySet());
}
}
}

View File

@ -1,356 +1,355 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.Hashtable; import java.util.HashSet;
import java.util.LinkedHashSet; import java.util.LinkedHashMap;
import java.util.Map; import java.util.LinkedHashSet;
import java.util.Properties; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.activation.FileTypeMap;
import javax.activation.FileTypeMap; import javax.servlet.RequestDispatcher;
import javax.servlet.RequestDispatcher; import javax.servlet.Servlet;
import javax.servlet.Servlet; import javax.servlet.ServletContext;
import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource;
import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.ResourceLoader; import org.springframework.util.Assert;
import org.springframework.util.Assert; import org.springframework.util.ObjectUtils;
import org.springframework.util.ObjectUtils; import org.springframework.web.util.WebUtils;
import org.springframework.web.util.WebUtils;
/**
/** * Mock implementation of the {@link javax.servlet.ServletContext} interface.
* Mock implementation of the {@link javax.servlet.ServletContext} interface. *
* * <p>Used for testing the Spring web framework; only rarely necessary for testing
* <p>Used for testing the Spring web framework; only rarely necessary for testing * application controllers. As long as application components don't explicitly
* application controllers. As long as application components don't explicitly * access the ServletContext, ClassPathXmlApplicationContext or
* access the ServletContext, ClassPathXmlApplicationContext or * FileSystemXmlApplicationContext can be used to load the context files for testing,
* FileSystemXmlApplicationContext can be used to load the context files for testing, * even for DispatcherServlet context definitions.
* even for DispatcherServlet context definitions. *
* * <p>For setting up a full WebApplicationContext in a test environment, you can
* <p>For setting up a full WebApplicationContext in a test environment, you can * use XmlWebApplicationContext (or GenericWebApplicationContext), passing in an
* use XmlWebApplicationContext (or GenericWebApplicationContext), passing in an * appropriate MockServletContext instance. You might want to configure your
* appropriate MockServletContext instance. You might want to configure your * MockServletContext with a FileSystemResourceLoader in that case, to make your
* MockServletContext with a FileSystemResourceLoader in that case, to make your * resource paths interpreted as relative file system locations.
* resource paths interpreted as relative file system locations. *
* * <p>A common setup is to point your JVM working directory to the root of your
* <p>A common setup is to point your JVM working directory to the root of your * web application directory, in combination with filesystem-based resource loading.
* web application directory, in combination with filesystem-based resource loading. * This allows to load the context files as used in the web application, with
* This allows to load the context files as used in the web application, with * relative paths getting interpreted correctly. Such a setup will work with both
* relative paths getting interpreted correctly. Such a setup will work with both * FileSystemXmlApplicationContext (which will load straight from the file system)
* FileSystemXmlApplicationContext (which will load straight from the file system) * and XmlWebApplicationContext with an underlying MockServletContext (as long as
* and XmlWebApplicationContext with an underlying MockServletContext (as long as * the MockServletContext has been configured with a FileSystemResourceLoader).
* the MockServletContext has been configured with a FileSystemResourceLoader). *
* * @author Rod Johnson
* @author Rod Johnson * @author Juergen Hoeller
* @author Juergen Hoeller * @since 1.0.2
* @since 1.0.2 * @see #MockServletContext(org.springframework.core.io.ResourceLoader)
* @see #MockServletContext(org.springframework.core.io.ResourceLoader) * @see org.springframework.web.context.support.XmlWebApplicationContext
* @see org.springframework.web.context.support.XmlWebApplicationContext * @see org.springframework.web.context.support.GenericWebApplicationContext
* @see org.springframework.web.context.support.GenericWebApplicationContext * @see org.springframework.context.support.ClassPathXmlApplicationContext
* @see org.springframework.context.support.ClassPathXmlApplicationContext * @see org.springframework.context.support.FileSystemXmlApplicationContext
* @see org.springframework.context.support.FileSystemXmlApplicationContext */
*/ public class MockServletContext implements ServletContext {
public class MockServletContext implements ServletContext {
private static final String TEMP_DIR_SYSTEM_PROPERTY = "java.io.tmpdir";
private static final String TEMP_DIR_SYSTEM_PROPERTY = "java.io.tmpdir";
private final Log logger = LogFactory.getLog(getClass());
private final Log logger = LogFactory.getLog(getClass());
private final ResourceLoader resourceLoader;
private final ResourceLoader resourceLoader;
private final String resourceBasePath;
private final String resourceBasePath;
private String contextPath = "";
private String contextPath = "";
private final Map<String, ServletContext> contexts = new HashMap<String, ServletContext>();
private final Map contexts = new HashMap();
private final Map<String, String> initParameters = new LinkedHashMap<String, String>();
private final Properties initParameters = new Properties();
private final Map<String, Object> attributes = new LinkedHashMap<String, Object>();
private final Hashtable attributes = new Hashtable();
private String servletContextName = "MockServletContext";
private String servletContextName = "MockServletContext";
/**
/** * Create a new MockServletContext, using no base path and a
* Create a new MockServletContext, using no base path and a * DefaultResourceLoader (i.e. the classpath root as WAR root).
* DefaultResourceLoader (i.e. the classpath root as WAR root). * @see org.springframework.core.io.DefaultResourceLoader
* @see org.springframework.core.io.DefaultResourceLoader */
*/ public MockServletContext() {
public MockServletContext() { this("", null);
this("", null); }
}
/**
/** * Create a new MockServletContext, using a DefaultResourceLoader.
* Create a new MockServletContext, using a DefaultResourceLoader. * @param resourceBasePath the WAR root directory (should not end with a slash)
* @param resourceBasePath the WAR root directory (should not end with a slash) * @see org.springframework.core.io.DefaultResourceLoader
* @see org.springframework.core.io.DefaultResourceLoader */
*/ public MockServletContext(String resourceBasePath) {
public MockServletContext(String resourceBasePath) { this(resourceBasePath, null);
this(resourceBasePath, null); }
}
/**
/** * Create a new MockServletContext, using the specified ResourceLoader
* Create a new MockServletContext, using the specified ResourceLoader * and no base path.
* and no base path. * @param resourceLoader the ResourceLoader to use (or null for the default)
* @param resourceLoader the ResourceLoader to use (or null for the default) */
*/ public MockServletContext(ResourceLoader resourceLoader) {
public MockServletContext(ResourceLoader resourceLoader) { this("", resourceLoader);
this("", resourceLoader); }
}
/**
/** * Create a new MockServletContext.
* Create a new MockServletContext. * @param resourceBasePath the WAR root directory (should not end with a slash)
* @param resourceBasePath the WAR root directory (should not end with a slash) * @param resourceLoader the ResourceLoader to use (or null for the default)
* @param resourceLoader the ResourceLoader to use (or null for the default) */
*/ public MockServletContext(String resourceBasePath, ResourceLoader resourceLoader) {
public MockServletContext(String resourceBasePath, ResourceLoader resourceLoader) { this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader());
this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader()); this.resourceBasePath = (resourceBasePath != null ? resourceBasePath : "");
this.resourceBasePath = (resourceBasePath != null ? resourceBasePath : "");
// Use JVM temp dir as ServletContext temp dir.
// Use JVM temp dir as ServletContext temp dir. String tempDir = System.getProperty(TEMP_DIR_SYSTEM_PROPERTY);
String tempDir = System.getProperty(TEMP_DIR_SYSTEM_PROPERTY); if (tempDir != null) {
if (tempDir != null) { this.attributes.put(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File(tempDir));
this.attributes.put(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File(tempDir)); }
} }
}
/**
/** * Build a full resource location for the given path,
* Build a full resource location for the given path, * prepending the resource base path of this MockServletContext.
* prepending the resource base path of this MockServletContext. * @param path the path as specified
* @param path the path as specified * @return the full resource path
* @return the full resource path */
*/ protected String getResourceLocation(String path) {
protected String getResourceLocation(String path) { if (!path.startsWith("/")) {
if (!path.startsWith("/")) { path = "/" + path;
path = "/" + path; }
} return this.resourceBasePath + path;
return this.resourceBasePath + path; }
}
public void setContextPath(String contextPath) {
public void setContextPath(String contextPath) { this.contextPath = (contextPath != null ? contextPath : "");
this.contextPath = (contextPath != null ? contextPath : ""); }
}
/* This is a Servlet API 2.5 method. */
/* This is a Servlet API 2.5 method. */ public String getContextPath() {
public String getContextPath() { return this.contextPath;
return this.contextPath; }
}
public void registerContext(String contextPath, ServletContext context) {
public void registerContext(String contextPath, ServletContext context) { this.contexts.put(contextPath, context);
this.contexts.put(contextPath, context); }
}
public ServletContext getContext(String contextPath) {
public ServletContext getContext(String contextPath) { if (this.contextPath.equals(contextPath)) {
if (this.contextPath.equals(contextPath)) { return this;
return this; }
} return this.contexts.get(contextPath);
return (ServletContext) this.contexts.get(contextPath); }
}
public int getMajorVersion() {
public int getMajorVersion() { return 2;
return 2; }
}
public int getMinorVersion() {
public int getMinorVersion() { return 5;
return 5; }
}
public String getMimeType(String filePath) {
public String getMimeType(String filePath) { return MimeTypeResolver.getMimeType(filePath);
return MimeTypeResolver.getMimeType(filePath); }
}
public Set<String> getResourcePaths(String path) {
public Set getResourcePaths(String path) { String actualPath = (path.endsWith("/") ? path : path + "/");
String actualPath = (path.endsWith("/") ? path : path + "/"); Resource resource = this.resourceLoader.getResource(getResourceLocation(actualPath));
Resource resource = this.resourceLoader.getResource(getResourceLocation(actualPath)); try {
try { File file = resource.getFile();
File file = resource.getFile(); String[] fileList = file.list();
String[] fileList = file.list(); if (ObjectUtils.isEmpty(fileList)) {
if (ObjectUtils.isEmpty(fileList)) { return null;
return null; }
} Set<String> resourcePaths = new LinkedHashSet<String>(fileList.length);
Set resourcePaths = new LinkedHashSet(fileList.length); for (String fileEntry : fileList) {
for (int i = 0; i < fileList.length; i++) { String resultPath = actualPath + fileEntry;
String resultPath = actualPath + fileList[i]; if (resource.createRelative(fileEntry).getFile().isDirectory()) {
if (resource.createRelative(fileList[i]).getFile().isDirectory()) { resultPath += "/";
resultPath += "/"; }
} resourcePaths.add(resultPath);
resourcePaths.add(resultPath); }
} return resourcePaths;
return resourcePaths; }
} catch (IOException ex) {
catch (IOException ex) { logger.warn("Couldn't get resource paths for " + resource, ex);
logger.warn("Couldn't get resource paths for " + resource, ex); return null;
return null; }
} }
}
public URL getResource(String path) throws MalformedURLException {
public URL getResource(String path) throws MalformedURLException { Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); if (!resource.exists()) {
if (!resource.exists()) { return null;
return null; }
} try {
try { return resource.getURL();
return resource.getURL(); }
} catch (MalformedURLException ex) {
catch (MalformedURLException ex) { throw ex;
throw ex; }
} catch (IOException ex) {
catch (IOException ex) { logger.warn("Couldn't get URL for " + resource, ex);
logger.warn("Couldn't get URL for " + resource, ex); return null;
return null; }
} }
}
public InputStream getResourceAsStream(String path) {
public InputStream getResourceAsStream(String path) { Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); if (!resource.exists()) {
if (!resource.exists()) { return null;
return null; }
} try {
try { return resource.getInputStream();
return resource.getInputStream(); }
} catch (IOException ex) {
catch (IOException ex) { logger.warn("Couldn't open InputStream for " + resource, ex);
logger.warn("Couldn't open InputStream for " + resource, ex); return null;
return null; }
} }
}
public RequestDispatcher getRequestDispatcher(String path) {
public RequestDispatcher getRequestDispatcher(String path) { if (!path.startsWith("/")) {
if (!path.startsWith("/")) { throw new IllegalArgumentException("RequestDispatcher path at ServletContext level must start with '/'");
throw new IllegalArgumentException("RequestDispatcher path at ServletContext level must start with '/'"); }
} return new MockRequestDispatcher(path);
return new MockRequestDispatcher(path); }
}
public RequestDispatcher getNamedDispatcher(String path) {
public RequestDispatcher getNamedDispatcher(String path) { return null;
return null; }
}
public Servlet getServlet(String name) {
public Servlet getServlet(String name) { return null;
return null; }
}
public Enumeration<Servlet> getServlets() {
public Enumeration getServlets() { return Collections.enumeration(new HashSet<Servlet>());
return Collections.enumeration(Collections.EMPTY_SET); }
}
public Enumeration<String> getServletNames() {
public Enumeration getServletNames() { return Collections.enumeration(new HashSet<String>());
return Collections.enumeration(Collections.EMPTY_SET); }
}
public void log(String message) {
public void log(String message) { logger.info(message);
logger.info(message); }
}
public void log(Exception ex, String message) {
public void log(Exception ex, String message) { logger.info(message, ex);
logger.info(message, ex); }
}
public void log(String message, Throwable ex) {
public void log(String message, Throwable ex) { logger.info(message, ex);
logger.info(message, ex); }
}
public String getRealPath(String path) {
public String getRealPath(String path) { Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
Resource resource = this.resourceLoader.getResource(getResourceLocation(path)); try {
try { return resource.getFile().getAbsolutePath();
return resource.getFile().getAbsolutePath(); }
} catch (IOException ex) {
catch (IOException ex) { logger.warn("Couldn't determine real path of resource " + resource, ex);
logger.warn("Couldn't determine real path of resource " + resource, ex); return null;
return null; }
} }
}
public String getServerInfo() {
public String getServerInfo() { return "MockServletContext";
return "MockServletContext"; }
}
public String getInitParameter(String name) {
public String getInitParameter(String name) { Assert.notNull(name, "Parameter name must not be null");
Assert.notNull(name, "Parameter name must not be null"); return this.initParameters.get(name);
return this.initParameters.getProperty(name); }
}
public void addInitParameter(String name, String value) {
public void addInitParameter(String name, String value) { Assert.notNull(name, "Parameter name must not be null");
Assert.notNull(name, "Parameter name must not be null"); this.initParameters.put(name, value);
this.initParameters.setProperty(name, value); }
}
public Enumeration<String> getInitParameterNames() {
public Enumeration getInitParameterNames() { return Collections.enumeration(this.initParameters.keySet());
return this.initParameters.keys(); }
}
public Object getAttribute(String name) {
public Object getAttribute(String name) { Assert.notNull(name, "Attribute name must not be null");
Assert.notNull(name, "Attribute name must not be null"); return this.attributes.get(name);
return this.attributes.get(name); }
}
public Enumeration<String> getAttributeNames() {
public Enumeration getAttributeNames() { return Collections.enumeration(this.attributes.keySet());
return this.attributes.keys(); }
}
public void setAttribute(String name, Object value) {
public void setAttribute(String name, Object value) { Assert.notNull(name, "Attribute name must not be null");
Assert.notNull(name, "Attribute name must not be null"); if (value != null) {
if (value != null) { this.attributes.put(name, value);
this.attributes.put(name, value); }
} else {
else { this.attributes.remove(name);
this.attributes.remove(name); }
} }
}
public void removeAttribute(String name) {
public void removeAttribute(String name) { Assert.notNull(name, "Attribute name must not be null");
Assert.notNull(name, "Attribute name must not be null"); this.attributes.remove(name);
this.attributes.remove(name); }
}
public void setServletContextName(String servletContextName) {
public void setServletContextName(String servletContextName) { this.servletContextName = servletContextName;
this.servletContextName = servletContextName; }
}
public String getServletContextName() {
public String getServletContextName() { return this.servletContextName;
return this.servletContextName; }
}
/**
/** * Inner factory class used to just introduce a Java Activation Framework
* Inner factory class used to just introduce a Java Activation Framework * dependency when actually asked to resolve a MIME type.
* dependency when actually asked to resolve a MIME type. */
*/ private static class MimeTypeResolver {
private static class MimeTypeResolver {
public static String getMimeType(String filePath) {
public static String getMimeType(String filePath) { return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath);
return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath); }
} }
}
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2009 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -17,7 +17,6 @@
package org.springframework.mock.web; package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.Servlet; import javax.servlet.Servlet;