Archive for February, 2009

Passing a XSL parameter from Java using TRAX

Friday, February 20th, 2009

Ecco uno snippet di codice Java per passare all’interno di una classe java dei parametri da passare al template xslt per la trasformazione, usando TRAX (javax.xml.transform):

import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
 
public class GlobalParameters
{
  public static void parseAndProcess(String sourceID, 
                                     String xslID,
                                     String outputID)
  {
    try
    {
      TransformerFactory tfactory = TransformerFactory.newInstance();
 
      Transformer transformer 
        = tfactory.newTransformer(new StreamSource(xslID));
 
      // Use the setParameter method to set global parameters
      transformer.setParameter("startX", new Integer(50));
      transformer.setParameter("baseColor", "magenta");
 
      transformer.transform(new StreamSource(new File(sourceID)),
                            new StreamResult(new File(outputID)));
    }
    catch (TransformerConfigurationException tce)
    {
      System.err.println("Exception: " + tce);
    }
    catch (TransformerException te)
    {
      System.err.println("Exception: " + te);
    }
  }
 
 
  public static void main(String argv[])
    throws java.io.IOException, 
           org.xml.sax.SAXException
  {
    GlobalParameters gp = new GlobalParameters();
    gp.parseAndProcess("xyz.xml", "params.xsl", "output.text");
  }
}

Document to String

Friday, February 13th, 2009

Ennesima FAQ, che posto qui così so dove trovarlo quando mi serve:

import org.w3c.dom.*;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
 
public class Util {
 
    public static String xmlToString(Node node) {
        try {
            Source source = new DOMSource(node);
            StringWriter stringWriter = new StringWriter();
            Result result = new StreamResult(stringWriter);
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer();
            transformer.transform(source, result);
            return stringWriter.getBuffer().toString();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Remote debugging Tomcat with Eclipse

Friday, February 13th, 2009

Una delle attività che mi capita spesso nelle mie attività lavorative è quella di sviluppare componenti JAVA che poi vengono eseguiti lato server su webapps.

Siccome in certi casi ho avuto necessità di poter fare il debug direttamente sui Tomcat di sviluppo, invece di farlo in locale.

Per prima cosa, sul script di avvio di tomcat, cercare la riga
set JAVA_OPTS= e accodare la seguente stringa
-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

A questo punto viene creato un socket con prodocollo jdwp sulla porta 8000 collegato a Tomcat.

Ora possiamo andare in Eclipse e selezionare il pulsante debug e nel menu di discesa selezionare la voce debug:
comparirà una popup e settare come si vede nella immagine allegata

esempio config remote debugger con eclipse

A questo punto lanciando il debug, Eclipse potrà collegarsi a Tomcat e sarà possibile debuggare sia le classi backweb come servlet e simili, sia le pagine jsp.

Nota, lo stesso concetto può essere applicato non solo su macchine con Tomcat, ma anche su altri application server come Resin, WebSphere… l’importante è sapere dove configurare per attivare la modalità di debug e specificare la porta ed il protocollo di connessione.