cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dobes Vandermeer (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (CXF-3005) Add support for jsonp in CXF JAX-RS
Date Thu, 11 Nov 2010 02:44:15 GMT

    [ https://issues.apache.org/jira/browse/CXF-3005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12930896#action_12930896
] 

Dobes Vandermeer edited comment on CXF-3005 at 11/10/10 9:42 PM:
-----------------------------------------------------------------

Here's a somewhat simpler solution; create a subclass of the JSONProvider that handles JSONP:

{code}
	/**
	 * Add jsonp support to the JSONProvider.
	 * 
	 * Basically, check for the appropriate content type
	 * and the parameter specifying the prefix.
	 */
	@Produces("application/javascript")
	static class JsonpProvider extends JSONProvider {
		@Context HttpServletRequest request; 
		
		@Override
		public void writeTo(Object obj, Class<?> cls, Type genericType, Annotation[] anns,
MediaType m, MultivaluedMap<String, Object> headers,
				OutputStream os) throws IOException {
			String prefix = request.getParameter("_jsonp");
			boolean hasPrefix = !isEmpty(prefix);
			if(hasPrefix) {
				os.write(prefix.getBytes(HttpUtils.getSetEncoding(m, headers, "UTF-8")));
				os.write('(');
			}
			super.writeTo(obj, cls, genericType, anns, m, headers, os);
			if(hasPrefix) {
				os.write(')');
			}
		}
	}

{code}

      was (Author: dobes_vandermeer):
    Here's a somewhat simpler solution; create a subclass of the JSONProvider that handles
JSONP:

{code}
	/**
	 * Add jsonp support to the JSONProvider.
	 * 
	 * Basically, check for the appropriate content type
	 * and the parameter specifying the prefix.
	 */
	@Produces("application/javascript")
	static class JsonpProvider extends JSONProvider {
		@Context HttpServletRequest request; 
		
		@Override
		protected void marshal(Marshaller ms, Object actualObject, Class<?> actualClass, Type
genericType, String enc, OutputStream os,
				boolean isCollection) throws Exception {
			String prefix = request.getParameter("_jsonp");
			boolean hasPrefix = !isEmpty(prefix);
			if(hasPrefix) {
				os.write(prefix.getBytes(enc));
				os.write('(');
			}
			super.marshal(ms, actualObject, actualClass, genericType, enc, os, isCollection);
			if(hasPrefix) {
				os.write(')');
			}
		}
	}

{code}
  
> Add support for jsonp in CXF JAX-RS
> -----------------------------------
>
>                 Key: CXF-3005
>                 URL: https://issues.apache.org/jira/browse/CXF-3005
>             Project: CXF
>          Issue Type: New Feature
>          Components: JAX-RS
>            Reporter: Josh Holtzman
>         Attachments: cxf_jsonp.diff
>
>
> JAX-RS endpoints that produce JSON can be wrapped by a callback to enable JSONP, or JSON
with padding.  The attached patch adds JSONP interceptors that may be added to a JAXRSServerFactoryBean
to support JSONP.
>     JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
>     factory.getInInterceptors().add(new JsonpInvokeInterceptor());
>     factory.getOutInterceptors().add(new JsonpPreStreamInterceptor());
>     factory.getOutInterceptors().add(new JsonpPostStreamInterceptor());
>     ...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message