入力ファイルから行を切り取り、SAP PI で出力を生成する必要があります。これは、sap PI のグラフィカル マッピングを使用して行うことはできないため、Java を使用して Eclipse でコードをビルドします。
以前BufferedReader
はロジックを構築していましたが、正常に動作していました..しかし、XML ファイルが PI に入ると、BufferedReader を変更しましたが、TransformerFactory
ここで立ち往生しています。
public class TestIntegrate {
private Document doc = null;
public static void main(String[] args) {
FileInputStream fin;
try {
fin = new FileInputStream("C:/Users/xyz/workspace/TEST_2.xml");
FileOutputStream fout = new FileOutputStream("D:\\ProgramFiles\\eclipse\\mapping\\poslogoutput.xml");
TestIntegrate t = new TestIntegrate();
t.execute(fin, fout);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void execute(InputStream sourceFile, OutputStream targetFile) /*throws StreamTransformationException*/ {
try {
// Creating the parser object.
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
doc = dBuilder.parse(sourceFile);
writeOutputfile(doc, targetFile);
} catch (Exception e) {
e.printStackTrace();
}
} // End of execute
// Write to the output file
private void writeOutputfile(Document doc, OutputStream targetFile) {
try {
String lineToRemove = "<Tax>";
String lineToRemove1 = "</Tax>";
String currentLine;
TransformerFactory transformFactory = TransformerFactory.newInstance();
DOMSource source = new DOMSource(doc);
Transformer transformer = transformFactory.newTransformer();
Writer outWriter = new StringWriter();
StreamResult result = new StreamResult(targetFile);
transformer.transform(source, result);
// Logic to trim the lines
while ((currentLine = reader.readLine()) != null) /* ERROR: no reader object */ {
String trimmedLine = currentLine.trim();
if (trimmedLine.equals(lineToRemove) || trimmedLine.equals(lineToRemove1)) continue;
outWriter.write(currentLine + System.getProperty("line.separator"));
}
System.out.println("File saved!");
reader.close(); //ERROR: no reader object
writer.close(); //ERROR:no Writer object
} catch (Exception e) {
e.printStackTrace();
}
}
}
入力ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<School>
<SSLC>
<name />
<rollno />
</SSLC>
<PUC>
<first_pu>
<name />
<rollno />
</first_pu>
<second_pu>
<name />
<rollno />
</second_pu>
</PUC>
<PUC>
<first_pu>
<name />
<rollno />
</first_pu>
<second_pu>
<name />
<rollno />
</second_pu>
</PUC>
<PUC>
<first_pu>
<name />
<rollno />
</first_pu>
<second_pu>
<name />
<rollno />
</second_pu>
</PUC>
</School>
前もって感謝します