I am working on Linux OS.
I am facing trouble parsing & transforming the XML file though Java.
Location of Java XMLTransform.class: /home/apps/source (this path is present in CLASSPATH)
Location of XML file (working directory): /home/apps/nk/working/payload.xml
When I am inside the “Working Directory”, I am invoking XMLTransform.class passing XML filename payload.xml to it but getting following error:
XML-22004: (Fatal Error) Error while parsing input XML document (Invalid InputSource.).
---------
oracle.xml.parser.v2.XMLParseException: Invalid InputSource.
at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:320)
at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:248)
at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:202)
at oracle.xml.jaxp.JXTransformer.transform(JXTransformer.java:321)
at TransformationEngine.main(TransformationEngine.java:30)
It is clear that class is not able to resolve the file name.
Please give pointers as to how I can resolve this?
Note: invoice_transformer.xsl is placed in same directory as .class file and CLASS file is able to read it.
Java Code:
import javax.xml.transform.*;
import java.io.*;
public class TransformationEngine {
public static void main(String[] args){
String payloadFileName = args[0];
String xslFile = "invoice_transformer.xsl";
InputStream is = java.lang.ClassLoader.getSystemResourceAsStream(xslFile);
InputStream pfis = java.lang.ClassLoader.getSystemResourceAsStream(payloadFileName);
try{
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(is));
transformer.transform(new javax.xml.transform.stream.StreamSource(pfis),new javax.xml.transform.stream.StreamResult(new FileOutputStream("IDMpayload.csv")));
}
catch(Exception e){
e.printStackTrace();
}
}
}
getSystemResourceAsStream()looks for the resource in the CLASSPATH. You don’t have/home/apps/nk/working/in your CLASSPATH (do you?).Instead use FileInputStream (as suggested by @Banthar )