Dispatcher does not force UTF-8 usage
-------------------------------------

                 Key: FOR-1194
                 URL: https://issues.apache.org/jira/browse/FOR-1194
             Project: Forrest
          Issue Type: Bug
          Components: Whiteboard: Dispatcher (stax)
            Reporter: Thorsten Scherler
            Priority: Critical


There is a problem in the dispatcher which seems only occur in Windows and Mac. 
In linux it is working fine.

If you create a contract and add e.g. ¿ñÜí  which is 
something like ü ñ ¿ it will become ¬ø√±√ú√≠ 

I am investigating since 2 days now and I identify the following code where the 
encoding get lost in Mac os. Actually everything that goes into the 
transformation is utf-8. after the transformer.transform(saxSource, 
streamResult); it is lost. 

XSLContractHelper.java

  public void transform(InputStream dataStream, Result streamResult)
      throws ContractException {
    //Source dataSource = new StreamSource(dataStream);
    try {
      InputSource inputSource = new InputSource(new 
InputStreamReader(dataStream, "UTF-8"));
      inputSource.setEncoding("UTF-8");
      SAXSource saxSource = new SAXSource(xmlReader,inputSource);
      transformer.transform(saxSource, streamResult);
    } catch (Exception e) {
      String message = "The xsl transformation has thrown an exception. for "
            + "the contract \""+name+"\".\nPlease see some FAQ:"
          + "\n"
          + e
          + "\n\nproblem->solution:\n"
          + "- org.apache.xpath.XPathException: Can not convert #STRING to a 
NodeList!\n"
          + "-> Try to activate \"allowXml\" and/or \"shrink\". If this is not 
working try the contract "
          + "xsl standalone and make sure it is not a xsl specific problem.";
      throw new ContractException(message);
    }
  }

This method is invoked from XSLContract.java, The out.toString is scrampled:
public BufferedInputStream execute(InputStream dataStream,
      Map<String, Object> properties) throws ContractException {
...
 ByteArrayOutputStream out = new ByteArrayOutputStream();
    // create a StreamResult and use it for the transformation
    try {
        OutputStreamWriter writer = new OutputStreamWriter(out,"UTF-8");
        Result streamResult = new StreamResult(writer);
        helper.transform(dataStream,streamResult);
    } catch (Exception e) {
      String message = "Could not invoke the transformation for "
          + "the contract \""+name+"\". "+"\n"+ e;
      throw new ContractException(message);
    }
    log.debug(out.toString());
...

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