[
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.