Один из способов сделать это - использовать стандартное преобразование Java и использовать стандартный javax.xml.transform
API для выполнения преобразования.
Для этого добавьте Java-преобразование в свой поток
На панели Import Packages
импортируйте необходимые пакеты Java
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
В панели Helper Code
мы создаем объект-трансформер.Как я понимаю, для каждого экземпляра создаются нестатические поля, поэтому не должно быть проблем с параллелизмом.( комментарии ? )
private final Transformer transformer = getNewTransformer();
public Transformer getNewTransformer()
{
// /opt/informatica/infadev/DataTransformation
final String IFCMPath = System.getenv("IFCONTENTMASTER_HOME");
final String xslt = IFCMPath + "/ServiceDB/xst/mytransform.xslt";
logInfo("Using XSLT File" + xslt);
try{
return TransformerFactory.newInstance().newTransformer(new StreamSource(xslt));
} catch(TransformerConfigurationException ex) {
logError("Could not create TransformerFactory with xslt " + xslt );
}
return null;
}
Наконец мы выполняем преобразование для входящего XML-документа, выполнив метод transform дляобъект трансформатор.
if( transformer == null ) {
failSession("Transformer was null");
}
//final long startTime = System.nanoTime();
//final long endTime;
try {
//logInfo("Recieved xml with size " + xmlin.length() );
// logInfo("Recieved xml " + xmlin );
final StringReader reader = new StringReader(xmlin);
final StringWriter writer = new StringWriter();
transformer.transform(new StreamSource(reader),new StreamResult(writer));
xmlout = writer.toString();
// logInfo("xmlout " + xmlout );
} catch (Exception e) {
incrementErrorCount(1);
logError(e.getMessage());
logError(xmlin);
}
//finally {
// endTime = System.nanoTime();
//}
//final long duration = endTime - startTime;
//logInfo("Duration " + duration / 1000000000.0 );