Exemplo n.º 1
0
  private TransformerHandler createTransformerHandler() {
    try {
      TransformerHandlerImpl transformerHandler =
          (TransformerHandlerImpl) GENERIC_FACTORY.newTransformerHandler(templates);

      TransformerImpl impl = (TransformerImpl) transformerHandler.getTransformer();
      XsltTransformer xslt = impl.getUnderlyingXsltTransformer();
      Controller controller = (Controller) xslt.getUnderlyingController();

      if (configuration != null) {
        for (Entry<String, Object> entry : configuration.entrySet()) {
          String name = entry.getKey();

          // is valid XSLT parameter name
          if (XSLT_PARAMETER_NAME_PATTERN.matcher(name).matches()) {
            xslt.setParameter(new QName(name), new XdmExternalObject(entry.getValue()));
          }
        }
      }

      controller.setErrorListener(new TraxErrorListener(LOG, source.toExternalForm()));

      if (context != null) {
        xslt.setParameter(CoreConstants.APPLICATION_CONTEXT_PARAM, new XdmExternalObject(context));
      }

      Map<String, Object> model = HttpContextHelper.getModel(parameters);
      xslt.setParameter(CoreConstants.MODEL_PARAM, new XdmExternalObject(model));

      if (parameters != null)
        try {
          ServletContext servletContext = HttpContextHelper.getServletContext(parameters);
          xslt.setParameter(
              CoreConstants.SERVLET_CONTEXT_PARAM, new XdmExternalObject(servletContext));

          HttpServletRequest servletRequest = HttpContextHelper.getRequest(parameters);
          HttpServletResponse servletResponse = HttpContextHelper.getResponse(parameters);

          if (servletRequest != null) {
            controller.setURIResolver(new SaxonResolver(servletRequest, servletResponse));

            xslt.setParameter(
                Message.LOCALE_PARAM,
                new XdmExternalObject(RequestContextUtils.getLocale(servletRequest)));

            xslt.setParameter(
                CoreConstants.SERVLET_REQUEST_PARAM, new XdmExternalObject(servletRequest));

            HttpSession session = servletRequest.getSession(false);
            if (session != null) {
              xslt.setParameter(
                  CoreConstants.SERVLET_SESSION_PARAM, new XdmExternalObject(session));
            }

            // add support for form binding
            xslt.setParameter(
                CoreConstants.REQUEST_CONTEXT_PARAM,
                new XdmExternalObject(
                    new RequestContext(servletRequest, servletResponse, servletContext, model)));
          }

          if (servletResponse != null) {
            xslt.setParameter(
                CoreConstants.SERVLET_RESPONSE_PARAM, new XdmExternalObject(servletResponse));
          }
        } catch (IllegalStateException e) {
          LOG.debug("Not a Servlet request!", e);

          //				@SuppressWarnings({"rawtypes", "unchecked"})
          //				HashMap<String, Object> model = (HashMap) parameters.get("model");
          //
          //				HttpServletRequest servletRequest = new VirtualRequest();
          //				servletRequest.setAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE,
          // context);
          //				RequestContext requestContext = new RequestContext(servletRequest, model);
          //
          //				transformer.setParameter(CoreConstants.REQUEST_CONTEXT_PARAM, requestContext);
        }

      return transformerHandler;
    } catch (TransformerConfigurationException ex) {
      throw new SetupException("Could not initialize transformer handler.", ex);
    }
  }