Hi, I am using xalan jar files for xsl transformation. I am using my custom class to call java method. It gives me below error if I add another node within /Doc:Document/Doc:camt.028.001.02/Doc:Assgnmt . Please see the attached file c.xml file SystemId Unknown; Line #0; Column #0; org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. My classpath is /tmp/ajay/xslt/xalan.jar:/tmp/ajay/xslt/xml-apis.jar:/tmp/ajay/xslt/xercesImpl.jar:/tmp/ajay/xslt/serializer.jar:/tmp/ajay/xslt/Validator.class:.
Please find the attached java, xml and xsl files. I do not know what I am
missing here. Is this a bug ? I am not sure. Please help me in resolving the
issue.
Thanks
Ajay Bhadauria
<Doc:Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Doc="urn:swift:xsd:swift.eni$camt.028.001.02"> <Doc:camt.028.001.02> <Doc:Assgnmt> <Doc:country1>USA</Doc:country1> <Doc:country2>CHINA</Doc:country2> <Doc:country3>BELGIUM</Doc:country3> </Doc:Assgnmt> </Doc:camt.028.001.02> </Doc:Document>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="urn:swift:xsd:swift.eni$camt.028.001.02" xmlns:java="xalan://Validator" > <xsl:output method="text" indent="no" /> <xsl:variable name="validatorObj" select="java:new()"/> <xsl:template match="/x:Document/x:camt.028.001.02/x:Assgnmt/x:country1" > <xsl:variable name="p1" select="." /> <xsl:variable name="t1" select="java:validateCountryCode($validatorObj, $p1)"/> <xsl:variable name="BR000" select="$t1 = 'T'"/> </xsl:template> <xsl:template match="/x:Document/x:camt.028.001.02/x:Assgnmt/x:country2" > <xsl:variable name="p1" select="." /> <xsl:variable name="t1" select="java:validateCountryCode($validatorObj, $p1)"/> <xsl:variable name="BR000" select="$t1 = 'T'"/> </xsl:template> </xsl:stylesheet>
import java.io.*;
import org.w3c.dom.* ;
import java.util.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMResult ;
import javax.xml.transform.stream.StreamSource ;
import javax.xml.parsers.DocumentBuilderFactory ;
import javax.xml.parsers.DocumentBuilder ;
import javax.xml.parsers.ParserConfigurationException ;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult ;
import javax.xml.transform.sax.SAXResult ;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.InputSource;
import org.apache.xalan.transformer.TransformerImpl ;
public class XmlTransform
{
public static void main ( String [] args )
{
parseXmlFile(args[0],args[1]);
}
public static void parseXmlFile(String inFilename, String xslFilename)
{
try {
// Create transformer factory
TransformerFactory factory = TransformerFactory.newInstance();
// Use the factory to create a template containing the xsl file
Templates template = factory.newTemplates(new StreamSource( new
FileInputStream(xslFilename)));
// Use the template to create a transformer
Transformer xformer = null ;
try
{
xformer = template.newTransformer();
}
catch(Exception e)
{
System.out.println(e.toString());
}
// Create a new document to hold the results
DocumentBuilderFactory dFactory =
DocumentBuilderFactory.newInstance();
dFactory.setNamespaceAware(true);
dFactory.setValidating(false);
dFactory.setIgnoringElementContentWhitespace(true);
dFactory.setIgnoringComments(true);
DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
Document doc = dBuilder.newDocument();
Document document= null;
try
{
document = dBuilder.parse( new FileInputStream(inFilename));
}
catch( Exception e)
{
System.out.println(e.toString());
}
Source source = new DOMSource( document );
Result result = new DOMResult( doc );
System.out.println("debug1");
xformer.transform( source,result);
System.out.println("debug2");
} catch (ParserConfigurationException e)
{
System.out.println("debug3");
System.out.println(e.toString());
}
catch (FileNotFoundException e)
{
System.out.println("debug4");
System.out.println(e.toString());
} catch (TransformerConfigurationException e)
{
System.out.println(e.toString());
} catch (TransformerException e)
{
System.out.println(e.toString());
}
}
}
XmlTransform.class
Description: application/java
