Author: sergeyb Date: Tue Feb 14 15:12:41 2012 New Revision: 1243984 URL: http://svn.apache.org/viewvc?rev=1243984&view=rev Log: Merged revisions 1243956 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
................ r1243956 | sergeyb | 2012-02-14 14:43:35 +0000 (Tue, 14 Feb 2012) | 9 lines Merged revisions 1243926 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1243926 | sergeyb | 2012-02-14 14:10:18 +0000 (Tue, 14 Feb 2012) | 1 line [CXF-4107] Defaulting to 'callback' padding if no custom value is provided ........ ................ Modified: cxf/branches/2.4.x-fixes/ (props changed) cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInInterceptor.java cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpPreStreamInterceptor.java cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInterceptorTest.java Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Feb 14 15:12:41 2012 @@ -1,2 +1,2 @@ -/cxf/branches/2.5.x-fixes:1242047,1242264,1242734,1243795 -/cxf/trunk:1242263,1242729 +/cxf/branches/2.5.x-fixes:1242047,1242264,1242734,1243795,1243956 +/cxf/trunk:1242263,1242729,1243926 Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInInterceptor.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInInterceptor.java?rev=1243984&r1=1243983&r2=1243984&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInInterceptor.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInInterceptor.java Tue Feb 14 15:12:41 2012 @@ -32,11 +32,15 @@ import org.apache.cxf.phase.Phase; * querystring. */ public class JsonpInInterceptor extends AbstractPhaseInterceptor<Message> { + public static final String JSONP_TYPE = "application/x-javascript"; public static final String CALLBACK_PARAM = "_jsonp"; public static final String CALLBACK_KEY = "JSONP.CALLBACK"; + public static final String DEFAULT_CALLBACK_VALUE = "callback"; private String callbackParam = CALLBACK_PARAM; + private String defaultCallback = DEFAULT_CALLBACK_VALUE; private String acceptType; + private String mediaType = JSONP_TYPE; public JsonpInInterceptor() { this(Phase.UNMARSHAL); @@ -60,7 +64,14 @@ public class JsonpInInterceptor extends protected String getCallbackValue(Message message) { HttpServletRequest request = (HttpServletRequest) message.get("HTTP.REQUEST"); - return request.getParameter(callbackParam); + String callback = request.getParameter(callbackParam); + if (StringUtils.isEmpty(callback)) { + String httpAcceptType = (String)message.get(Message.ACCEPT_CONTENT_TYPE); + if (httpAcceptType != null && mediaType.equals(httpAcceptType)) { + return defaultCallback; + } + } + return callback; } public void setCallbackParam(String callbackParam) { @@ -78,4 +89,20 @@ public class JsonpInInterceptor extends public String getAcceptType() { return acceptType; } + + public void setMediaType(String mediaType) { + this.mediaType = mediaType; + } + + public String getMediaType() { + return mediaType; + } + + public void setDefaultCallback(String defaultCallback) { + this.defaultCallback = defaultCallback; + } + + public String getDefaultCallback() { + return defaultCallback; + } } Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpPreStreamInterceptor.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpPreStreamInterceptor.java?rev=1243984&r1=1243983&r2=1243984&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpPreStreamInterceptor.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpPreStreamInterceptor.java Tue Feb 14 15:12:41 2012 @@ -34,8 +34,7 @@ import org.apache.cxf.phase.Phase; */ public class JsonpPreStreamInterceptor extends AbstractJsonpOutInterceptor { - private static final String JSONP_TYPE = "application/x+javascript"; - private String mediaType = JSONP_TYPE; + private String mediaType = JsonpInInterceptor.JSONP_TYPE; private String paddingEnd = "("; public JsonpPreStreamInterceptor() { Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInterceptorTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInterceptorTest.java?rev=1243984&r1=1243983&r2=1243984&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInterceptorTest.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/jsonp/JsonpInterceptorTest.java Tue Feb 14 15:12:41 2012 @@ -19,19 +19,24 @@ package org.apache.cxf.jaxrs.provider.jsonp; +import java.io.IOException; + import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import org.apache.cxf.message.Exchange; +import org.apache.cxf.message.ExchangeImpl; import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageImpl; import org.easymock.EasyMock; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; -public class JsonpInterceptorTest { +public class JsonpInterceptorTest extends Assert { public static final String JSON = "{}"; @@ -100,6 +105,43 @@ public class JsonpInterceptorTest { // Verify that the mock response stream was written to as expected org.easymock.EasyMock.verify(out); } + + @Test + public void testJsonWithDefaultPadding() throws Exception { + // Mock up an output stream as a strict mock. We want to verify that its + // being written to correctly. + final TestServletOutputStream out = new TestServletOutputStream(); + + // Mock up an HTTP request + HttpServletRequest request = EasyMock + .createNiceMock(HttpServletRequest.class); + EasyMock.expect( + request.getParameter(JsonpInInterceptor.CALLBACK_PARAM)) + .andReturn(null); + EasyMock.replay(request); + + // Mock up an HTTP response + HttpServletResponse response = EasyMock + .createNiceMock(HttpServletResponse.class); + EasyMock.expect(response.getOutputStream()).andReturn(out).times(2); + EasyMock.replay(response); + + // Mock up a message + Message message = new MessageImpl(); + message.put("HTTP.REQUEST", request); + message.put("HTTP.RESPONSE", response); + message.put(Message.ACCEPT_CONTENT_TYPE, JsonpInInterceptor.JSONP_TYPE); + + Exchange exchange = new ExchangeImpl(); + message.setExchange(exchange); + + // Process the message + in.handleMessage(message); + preStream.handleMessage(message); + postStream.handleMessage(message); + + assertEquals("callback();", out.getValue()); + } @Test public void testJsonWithoutPadding() throws Exception { @@ -151,5 +193,16 @@ public class JsonpInterceptorTest { org.easymock.EasyMock.verify(out); } - + private static class TestServletOutputStream extends ServletOutputStream { + private StringBuilder sb = new StringBuilder(); + + public void write(byte[] data) throws IOException { + sb.append(new String(data, "UTF-8")); + } + public String getValue() { + return sb.toString(); + } + public void write(int b) throws IOException { + } + }; }
