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