Re: Unable to change content-type with Interceptor?

2015-07-27 Thread Lukasz Lenart
2015-07-23 23:18 GMT+02:00 JOSE L MARTINEZ-AVIAL jlm...@gmail.com:
 Hello all,
I was just looking for this option to override the content-type of the
 json result. Is there any fix for this?

Not sure what I have been referring to but JsonResult has contentType
param defined
https://github.com/apache/struts/blob/master/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java#L101


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Unable to change content-type with Interceptor?

2015-07-23 Thread JOSE L MARTINEZ-AVIAL
Hello all,
   I was just looking for this option to override the content-type of the
json result. Is there any fix for this?

  Thanks

JL

2012-12-31 12:41 GMT-05:00 Lukasz Lenart lukaszlen...@apache.org:

 2012/12/30 Burton Rhodes burtonrho...@gmail.com:
  Lukasz -
 
  Thanks for all your help.  You got me on the right track and it appears
 the
  json Result was what was overriding and setting the content type.  As a
  result, I have overridden the JSONResult class to use the dynamic
  content-Type.

 You're welcome :-)

  /**
   * Custom json result type to set Content-Type response header
 dynamically
  to either 'application/json' or 'plain/text'
   * according to what the request header identifies in the Accept header
   *
   * (this is to fix browser wanting to download the json response on an
 ajax
  submit)
   *
   * @author Burton Rhodes
   *
   */
  public class JsonDynamicContentTypeResult extends JSONResult {
 
  private static final Logger LOG =
  LoggerFactory.getLogger(JsonDynamicContentTypeResult.class);
 
  @Override
  public void execute(ActionInvocation invocation) throws Exception {
 
  ActionContext actionContext = invocation.getInvocationContext();
  HttpServletRequest request = (HttpServletRequest)
  actionContext.get(StrutsStatics.HTTP_REQUEST);
  HttpServletResponse response = (HttpServletResponse)
  actionContext.get(StrutsStatics.HTTP_RESPONSE);
 
  // Set Content-Type according to what the request will accept
  if (request.getHeader(Accept)!=null 
  request.getHeader(Accept).toLowerCase().contains(application/json)) {
  this.setContentType(application/json);
  } else {
  // Default to text/plain
  this.setContentType(text/plain);
  }
 
  try {
  Object rootObject;
  rootObject = readRootObject(invocation);
  writeToResponse(response, createJSONString(request,
  rootObject), enableGzip(request));
  } catch (IOException exception) {
  LOG.error(exception.getMessage(), exception);
  throw exception;
  }
  }
 
 
  }

 Right now contentType isn't dynamically resolved, please register an
 issue and I'll add such option to JSONResult so you will be able to
 specify contentType via param/ tag, eg.

 result type=json
 param name=contentType${resolveContentType}/param
 /result

 and the action's resolvedContentType method will be called to obtain
 valid contentType


 Happy New Year :-)
 --
 Łukasz
 + 48 606 323 122 http://www.lenart.org.pl/

 -
 To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
 For additional commands, e-mail: user-h...@struts.apache.org




Re: Unable to change content-type with Interceptor?

2012-12-31 Thread Lukasz Lenart
2012/12/30 Burton Rhodes burtonrho...@gmail.com:
 Lukasz -

 Thanks for all your help.  You got me on the right track and it appears the
 json Result was what was overriding and setting the content type.  As a
 result, I have overridden the JSONResult class to use the dynamic
 content-Type.

You're welcome :-)

 /**
  * Custom json result type to set Content-Type response header dynamically
 to either 'application/json' or 'plain/text'
  * according to what the request header identifies in the Accept header
  *
  * (this is to fix browser wanting to download the json response on an ajax
 submit)
  *
  * @author Burton Rhodes
  *
  */
 public class JsonDynamicContentTypeResult extends JSONResult {

 private static final Logger LOG =
 LoggerFactory.getLogger(JsonDynamicContentTypeResult.class);

 @Override
 public void execute(ActionInvocation invocation) throws Exception {

 ActionContext actionContext = invocation.getInvocationContext();
 HttpServletRequest request = (HttpServletRequest)
 actionContext.get(StrutsStatics.HTTP_REQUEST);
 HttpServletResponse response = (HttpServletResponse)
 actionContext.get(StrutsStatics.HTTP_RESPONSE);

 // Set Content-Type according to what the request will accept
 if (request.getHeader(Accept)!=null 
 request.getHeader(Accept).toLowerCase().contains(application/json)) {
 this.setContentType(application/json);
 } else {
 // Default to text/plain
 this.setContentType(text/plain);
 }

 try {
 Object rootObject;
 rootObject = readRootObject(invocation);
 writeToResponse(response, createJSONString(request,
 rootObject), enableGzip(request));
 } catch (IOException exception) {
 LOG.error(exception.getMessage(), exception);
 throw exception;
 }
 }


 }

Right now contentType isn't dynamically resolved, please register an
issue and I'll add such option to JSONResult so you will be able to
specify contentType via param/ tag, eg.

result type=json
param name=contentType${resolveContentType}/param
/result

and the action's resolvedContentType method will be called to obtain
valid contentType


Happy New Year :-)
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Unable to change content-type with Interceptor?

2012-12-30 Thread Lukasz Lenart
2012/12/30 Burton Rhodes burtonrho...@gmail.com:
 I'm not sure what I'm doing wrong, but I cannot for the life of me change
 the content-type of the response using an interceptor.  My interceptor code
 is below.  The example below seems a bit absurd, but eventually I will add
 code to change the content-type dynamically from application/json to
 text/plain depending on what the request will accept (this is to fix an
 IE bug related to ajax file uploads).  What am I missing here?  Many thanks
 in advance.

 !-- struts.xml snippit --
 package name=jsonSecure namespace=/app/json extends=json-default

 interceptors
 interceptor name=jsonDynamicContentType
 class=com.afs.web.interceptor.JsonDynamicContentTypeInterceptor/
 interceptor-stack name=dynamicContentType
 interceptor-ref name=json/
 interceptor-ref name=jsonDynamicContentType/
 /interceptor-stack
 /interceptors

Did you try to change order of the interceptors? Interceptors are
executed in FILO - First-In-Last-Out - which means json interceptor
will be executed as the first one, but when action was executed and
result will be forwarded back, json interceptor will be executed as
the last one:

json-jsonDynamicContentType-action-result-jsonDynamicContentType-json

http://struts.apache.org/2.x/docs/interceptors.html


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Unable to change content-type with Interceptor?

2012-12-30 Thread Burton Rhodes
Just tried that without success.  Oddly, even when I debug the code, the
reponse.contentType is not changed immediately after the line:
response.setContentType(text/plain).  I am wondering if the contentType
cannot be set twice (or overridden once set)?


On Sun, Dec 30, 2012 at 11:39 AM, Lukasz Lenart lukaszlen...@apache.orgwrote:

 2012/12/30 Burton Rhodes burtonrho...@gmail.com:
  I'm not sure what I'm doing wrong, but I cannot for the life of me change
  the content-type of the response using an interceptor.  My interceptor
 code
  is below.  The example below seems a bit absurd, but eventually I will
 add
  code to change the content-type dynamically from application/json to
  text/plain depending on what the request will accept (this is to fix
 an
  IE bug related to ajax file uploads).  What am I missing here?  Many
 thanks
  in advance.
 
  !-- struts.xml snippit --
  package name=jsonSecure namespace=/app/json extends=json-default
 
  interceptors
  interceptor name=jsonDynamicContentType
  class=com.afs.web.interceptor.JsonDynamicContentTypeInterceptor/
  interceptor-stack name=dynamicContentType
  interceptor-ref name=json/
  interceptor-ref name=jsonDynamicContentType/
  /interceptor-stack
  /interceptors

 Did you try to change order of the interceptors? Interceptors are
 executed in FILO - First-In-Last-Out - which means json interceptor
 will be executed as the first one, but when action was executed and
 result will be forwarded back, json interceptor will be executed as
 the last one:

 json-jsonDynamicContentType-action-result-jsonDynamicContentType-json

 http://struts.apache.org/2.x/docs/interceptors.html


 Regards
 --
 Łukasz
 + 48 606 323 122 http://www.lenart.org.pl/

 -
 To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
 For additional commands, e-mail: user-h...@struts.apache.org




Re: Unable to change content-type with Interceptor?

2012-12-30 Thread Lukasz Lenart
2012/12/30 Burton Rhodes burtonrho...@gmail.com:
 Just tried that without success.  Oddly, even when I debug the code, the
 reponse.contentType is not changed immediately after the line:
 response.setContentType(text/plain).  I am wondering if the contentType
 cannot be set twice (or overridden once set)?

As mentioned here [1] you can change content-type till getWriter is
called or response committed

[1] 
http://docs.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html#setContentType(java.lang.String)


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Unable to change content-type with Interceptor?

2012-12-30 Thread Lukasz Lenart
2012/12/30 Burton Rhodes burtonrho...@gmail.com:
 HttpServletResponse response = (HttpServletResponse)
 invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);

Maybe try to use:
HttpServletRequest request = ServletActionContext.getRequest();


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Unable to change content-type with Interceptor?

2012-12-30 Thread Burton Rhodes
Lukasz -

Thanks for all your help.  You got me on the right track and it appears the
json Result was what was overriding and setting the content type.  As a
result, I have overridden the JSONResult class to use the dynamic
content-Type.

/**
 * Custom json result type to set Content-Type response header dynamically
to either 'application/json' or 'plain/text'
 * according to what the request header identifies in the Accept header
 *
 * (this is to fix browser wanting to download the json response on an ajax
submit)
 *
 * @author Burton Rhodes
 *
 */
public class JsonDynamicContentTypeResult extends JSONResult {

private static final Logger LOG =
LoggerFactory.getLogger(JsonDynamicContentTypeResult.class);

@Override
public void execute(ActionInvocation invocation) throws Exception {

ActionContext actionContext = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest)
actionContext.get(StrutsStatics.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)
actionContext.get(StrutsStatics.HTTP_RESPONSE);

// Set Content-Type according to what the request will accept
if (request.getHeader(Accept)!=null 
request.getHeader(Accept).toLowerCase().contains(application/json)) {
this.setContentType(application/json);
} else {
// Default to text/plain
this.setContentType(text/plain);
}

try {
Object rootObject;
rootObject = readRootObject(invocation);
writeToResponse(response, createJSONString(request,
rootObject), enableGzip(request));
} catch (IOException exception) {
LOG.error(exception.getMessage(), exception);
throw exception;
}
}


}



On Sun, Dec 30, 2012 at 12:09 PM, Lukasz Lenart lukaszlen...@apache.orgwrote:

 2012/12/30 Burton Rhodes burtonrho...@gmail.com:
  HttpServletResponse response = (HttpServletResponse)
  invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);

 Maybe try to use:
 HttpServletRequest request = ServletActionContext.getRequest();


 Regards
 --
 Łukasz
 + 48 606 323 122 http://www.lenart.org.pl/

 -
 To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
 For additional commands, e-mail: user-h...@struts.apache.org