SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

240 lines
6.3 KiB

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();
}
}