Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-5656

ContentType is removed for InternalServerError and doesn't seem to be a way to set a charset



    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.7.7, 2.7.10
    • Fix Version/s: 2.7.11, 3.0
    • Component/s: JAX-RS
    • Labels:
    • Estimated Complexity:


      We have a Rest service that uses JAX-RS and CXF. When we used CXF 2.3.3, if there was a problem with the request and a non 200 status code was returned, the browser would display the message from the response with any encoded non ASCII characters as the ContentType returned application/json;charset=utf-8.

      After upgrading to 2.7.7, we noticed that non ASCII characters where not being encoded for Status 500 - Internal Server Error. This doesn't happen for any other status codes and we noticed that charset=utf-8 was being stripped from the ContentType. After looking through the CXF code, I noticed that the AbstractHTTPDestination class was removing the ContentType (line 553). The ContentType was then re-added in getContentTypeFromMessage method in the headers object without the Charset. Looking at this method, I noticed that the encoding was taken from Message.ENCODING and in our case this was null.

      There doesn't seem to be a way of setting org.apache.cxf.message.Message.ENCODING from either the ExceptionMapper or ExceptionMapper. I have also set the encoding type in the Response object in ExceptionMapper, but this doesn't seem to make much difference either.

      Removing the ContentType seems like a bug, as if the ContentType has been previously set and then this should be preserved. Is there a work around for this problem in the mean time.




            • Assignee:
              sergey_beryozkin Sergey Beryozkin
              andy.kane Andy Kane
            • Votes:
              0 Vote for this issue
              2 Start watching this issue


              • Created: