package de.superx.bin; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.logging.Level; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.SAXException; import de.memtext.util.DateUtils; import de.memtext.util.GetOpts; import de.memtext.util.GetOpts.Options; import de.memtext.util.LogUtils; import de.memtext.util.StringUtils; import de.memtext.util.XMLUtils; public class WebserviceClientFiposGroupsHoh extends AbstractWebserviceClient { private boolean isDebug = false; private Document configDocument; private XMLInputFactory factory = XMLInputFactory.newInstance(); private String xmlConfig; private String url; private String soap; private String outfilename; private String setname; private boolean isDeleteTmpXmlFileWanted = true; private File tmpFile; private PrintWriter fwLeafs; private BufferedWriter bfwLeafs; private StringBuilder leafs = new StringBuilder(); public static void main(String args[]) { System.out.println("SuperX-WebserviceClientFiposGroupsHoh Version 1.0.2"); WebserviceClientFiposGroupsHoh tc = new WebserviceClientFiposGroupsHoh(); tc.run(args); } public WebserviceClientFiposGroupsHoh() { } public void run(String args[]) { try { initLogging(); GetOpts.setOpts(args); String isdrin = GetOpts.isAllRequiredOptionsPresent( new Options[] { Options.opt_xmlconfig, Options.opt_setname, Options.opt_out }); if (isdrin != null) { System.err.println("Folgende Optionen fehlen: " + isdrin); // System.err.println(usage); System.exit(1); } readConfig(); perform(); String msg = " fertig: " + DateUtils.getTodayString() + " " + DateUtils.getNowString(); logger.info(msg); System.out.println(msg); } catch (Exception e) { logger.severe(e.getMessage()); System.out.println("Error " + e.getMessage()); e.printStackTrace(); LogUtils.close("wc"); System.exit(1); } finally { LogUtils.close("wc"); } } private void perform() throws Exception { Node n = XMLUtils.getFirstNode(configDocument, "url"); url = XMLUtils.getTheValue(n); url = adaptURL(url); logger.fine("URL:" + url); System.out.println("URL:" + url); n = XMLUtils.getFirstNode(configDocument, "soap"); soap = XMLUtils.getTheValue(n); soap = soap.replace("XXSETNAMEXX", setname); System.out.println(soap); // n = XMLUtils.getFirstNode(configDocument, datentyp + // "detailreplacenode"); logger.fine("SOAP Aufruf:\n" + soap); tmpFile = createSoapFile(soap, url); String msg = " - empfangen "; if (!isDeleteTmpXmlFileWanted) msg += " (" + tmpFile + ")"; msg += " " + DateUtils.getNowString(); System.out.println(msg); if (isReplyOk(tmpFile)) { initOutFile(); readData(); if (leafs.length() > 0) { bfwLeafs.write(leafs.toString()); bfwLeafs.flush(); } if (isDeleteTmpXmlFileWanted) tmpFile.delete(); } else { msg = "Error: Aufruf von Webservice für Beseg " + " (" + xmlConfig + ") fehlgeschlagen"; System.out.println(msg); System.out.println(StringUtils.readFile(tmpFile)); logger.severe(msg); LogUtils.close("wc"); System.exit(-1); } closeFile(); } private void readData() throws XMLStreamException, IOException { InputStream in = null; if (isDebug) in = new FileInputStream( "/home/superx/svn/repos/Projekte/hohenheim_uni/webservices/finanzposgruppen/sxbmbf.txt"); else in = new FileInputStream(tmpFile); XMLStreamReader parser = factory.createXMLStreamReader(in); leafs.setLength(0); boolean getDataLeafs = false; boolean isLeafs = false; while (parser.hasNext()) { switch (parser.getEventType()) { case XMLStreamConstants.START_ELEMENT: String name = parser.getLocalName(); // System.out.println("Start " + name); if (name.equals("EX_SETLEAF")) isLeafs = true; if (isLeafs && isRelevantNodeName(name)) getDataLeafs = true; // Spaltennamen zu Debugzwecken anzeigen // else if (getData && !name.equals("item")) // result.append(prefix + "_" + parser.getLocalName()); break; case XMLStreamConstants.CHARACTERS: if (isLeafs && getDataLeafs && !parser.isWhiteSpace()) { leafs.append(purge(parser.getText(), true)); } break; case XMLStreamConstants.END_ELEMENT: name = parser.getLocalName(); // System.out.println("END " + name); if (name.equals("EX_SETLEAF")) isLeafs = false; if (isLeafs && getDataLeafs && isRelevantNodeName(name)) { getDataLeafs = false; leafs.append("^"); } if (isLeafs && name.equals("item")) { leafs.append(setname + "^\n"); // als letzte Spalte noch den eigentlichen Namen des Sets (Superset) // hinzufuegen. } break; case XMLStreamConstants.END_DOCUMENT: parser.close(); break; } parser.next(); } in.close(); // abschließendes \n entfernen // if (result.length() > 0) result.setLength(result.length() - 1); } private void readConfig() throws IOException, SAXException { xmlConfig = GetOpts.getValue(Options.opt_xmlconfig); setname = GetOpts.getValue(Options.opt_setname); outfilename = GetOpts.getValue(Options.opt_out); System.out.println("\n" + DateUtils.getTodayString() + " " + DateUtils.getNowString()); if (GetOpts.isPresent(Options.opt_noDelete)) isDeleteTmpXmlFileWanted = false; logger.log(Level.INFO, "Verarbeite " + xmlConfig); System.out.println("Verarbeite " + xmlConfig); configDocument = XMLUtils.buildDocument(new File(xmlConfig)); } private void initOutFile() throws Exception { File outFile = new File(outfilename); if (outFile.exists()) outFile.delete(); fwLeafs = new PrintWriter(outFile); bfwLeafs = new BufferedWriter(fwLeafs); } private boolean isRelevantNodeName(String name) { return name.equals("SETNAME") || name.equals("VALSIGN") || name.equals("VALOPTION") || name.equals("VALFROM") || name.equals("VALTO"); } private void closeFile() throws Exception { bfwLeafs.close(); fwLeafs.close(); if (isDeleteTmpXmlFileWanted) if (tmpFile.exists()) tmpFile.delete(); } }