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.
 
 
 
 
 
 

285 lines
8.4 KiB

package de.superx.bin;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
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 WebserviceClientBseg extends AbstractWebserviceClient {
private Document configDocument;
private XMLInputFactory factory = XMLInputFactory.newInstance();
private String xmlConfig;
private String url;
private String soap;
private String outfilename;
private File tmpFile;
private File outFileBSEG;
private File outFileBKPF;
private String jahr;
private String hsnr;
private int jahrint;
private PrintWriter fwBSEG;
private PrintWriter fwBKPF;
private BufferedWriter bfwBSEG;
private BufferedWriter bfwBKPF;
private Calendar cal = Calendar.getInstance();
private Calendar targetCal = Calendar.getInstance();
private StringBuilder bseg = new StringBuilder();
private StringBuilder bkpf = new StringBuilder();
public static void main(String[] args) {
System.out.println("SuperX-WebserviceClientBseg Version 1.1");
WebserviceClientBseg tc = new WebserviceClientBseg();
tc.run(args);
}
public void run(String[] args) {
try {
initLogging();
GetOpts.setOpts((String[]) args);
String isdrin = GetOpts.isAllRequiredOptionsPresent(new Options[] {Options.opt_xmlconfig,
Options.opt_jahr,
Options.opt_hsnr,
Options.opt_out});
if (isdrin != null) {
System.err.println("Folgende Optionen fehlen: " + isdrin);
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((String) "wc");
System.exit(1);
} finally {
LogUtils.close((String) "wc");
}
}
private void perform() throws Exception {
Node n = XMLUtils.getFirstNode((Document) configDocument, (String) "url");
url = XMLUtils.getTheValue((Node) n);
url = adaptURL(url);
logger.log(Level.INFO, "URL " + url);
System.out.println("URL " + url);
n = XMLUtils.getFirstNode((Document) configDocument, (String) "soap");
soap = XMLUtils.getTheValue((Node) n);
soap = soap.replace("XXHSNRXX", hsnr);
soap = soap.replace("XXJAHRXX", jahr);
System.out.println(soap);
initOutFiles();
int i = 0;
int jahrint = Integer.parseInt(jahr);
while (cal.get(1) == jahrint && cal.before(targetCal)) {
i++;
String msg = "starte Aufruf " + i+ " (" + getDateString() + ") ";
String tmpsoap = getTmpSoap();
logger.fine("SOAP Aufruf:\n" + tmpsoap);
System.out.print(msg);
tmpFile = createSoapFile(tmpsoap, url);
msg = " - empfangen ";
if (!isDeleteTmpXmlFileWanted) {
msg = msg + " (" + tmpFile + ")";
}
msg = msg + " " + DateUtils.getNowString();
System.out.println(msg);
if (isReplyOk(tmpFile)) {
readData();
if (bseg.length() > 0) {
bfwBSEG.write(bseg.toString());
bfwBSEG.flush();
}
if (bkpf.length() > 0) {
bfwBKPF.write(bkpf.toString());
bfwBKPF.flush();
}
if (isDeleteTmpXmlFileWanted)
tmpFile.delete();
} else {
msg = "Error: Aufruf von Webservice fuer Beseg (" + xmlConfig + ") fehlgeschlagen";
System.out.println(msg);
System.out.println(StringUtils.readFile((File) tmpFile));
logger.severe(msg);
LogUtils.close((String) "wc");
System.exit(-1);
}
}
closeFile();
}
private String getDateString() {
int month = cal.get(2) + 1;
String monthstr = "" + month + "";
if (month < 10) {
monthstr = "0" + month;
}
int day = cal.get(5);
String daystring = "" + day + "";
if (day < 10) {
daystring = "0" + day;
}
String result = "" + cal.get(1) + "-" + monthstr + "-" + daystring;
return result;
}
private String getTmpSoap() {
String tempsoap = soap;
String start = getDateString();
String end = getDateString();
if (cal.get(1) != jahrint) {
end = jahr + "-12-31";
}
tempsoap = tempsoap.replaceAll("XXSTARTXX", start);
tempsoap = tempsoap.replaceAll("XXENDEXX", end);
cal.add(6, 1);
return tempsoap;
}
private void readConfig() throws IOException, SAXException {
xmlConfig = GetOpts.getValue(Options.opt_xmlconfig);
hsnr = GetOpts.getValue(Options.opt_hsnr);
outfilename = GetOpts.getValue(Options.opt_out);
jahr = GetOpts.getValue(Options.opt_jahr);
jahrint = Integer.parseInt(jahr);
cal.set(jahrint, 0, 1);
System.out.println("\n" + DateUtils.getTodayString() + " " + DateUtils.getNowString());
if (GetOpts.isPresent(Options.opt_noDelete)) {
isDeleteTmpXmlFileWanted = false;
}
logger.log(Level.INFO, "Geschaeftsjahr " + jahr);
System.out.println("Geschaeftsjahr " + jahr);
logger.log(Level.INFO, "HSNR " + hsnr);
System.out.println("HSNR " + hsnr);
logger.log(Level.INFO, "Verarbeite " + xmlConfig);
System.out.println("Verarbeite " + xmlConfig);
configDocument = XMLUtils.buildDocument((File) new File(xmlConfig));
}
private void initOutFiles() throws Exception {
outFileBSEG = new File(outfilename);
if (outFileBSEG.exists()) {
outFileBSEG.delete();
}
outFileBKPF = new File(StringUtils.replace((String) outfilename, (String) ".", (String) "_bkpf."));
fwBSEG = new PrintWriter(outFileBSEG);
fwBKPF = new PrintWriter(outFileBKPF);
bfwBSEG = new BufferedWriter(fwBSEG);
bfwBKPF = new BufferedWriter(fwBKPF);
}
private void closeFile() throws Exception {
bfwBSEG.close();
fwBSEG.close();
bfwBKPF.close();
fwBKPF.close();
if (isDeleteTmpXmlFileWanted && tmpFile.exists()) {
tmpFile.delete();
}
}
private void readData() throws XMLStreamException, IOException {
FileInputStream in = new FileInputStream(tmpFile);
XMLStreamReader parser = factory.createXMLStreamReader(in);
bseg.setLength(0);
bkpf.setLength(0);
boolean getDataBSEG = false;
boolean getDataBKPF = false;
boolean isBSEG = false;
boolean isBKPF = false;
String name;
while (parser.hasNext()) {
switch (parser.getEventType()) {
case XMLStreamConstants.START_ELEMENT: {
name = parser.getLocalName();
if (name.equals("EX_BSEG")) {
isBSEG = true;
}
if (isBSEG && isRelevantNodeNameBSEG(name)) {
getDataBSEG = true;
}
if (name.equals("EX_BKPF")) {
isBKPF = true;
}
if (!isBKPF || !isRelevantNodeNameBKPF(name))
break;
getDataBKPF = true;
break;
}
case XMLStreamConstants.CHARACTERS: {
if (isBSEG && getDataBSEG && !parser.isWhiteSpace()) {
bseg.append(WebserviceClientBseg.purge((String) parser.getText(), true));
}
if (!isBKPF || !getDataBKPF || parser.isWhiteSpace())
break;
bkpf.append(WebserviceClientBseg.purge((String) parser.getText(), true));
break;
}
case XMLStreamConstants.END_ELEMENT: {
name = parser.getLocalName();
if (name.equals("EX_BSEG")) {
isBSEG = false;
}
if (isBSEG && getDataBSEG && isRelevantNodeNameBSEG(name)) {
getDataBSEG = false;
bseg.append("^");
}
if (name.equals("EX_BKPF")) {
isBKPF = false;
}
if (isBKPF && getDataBKPF && isRelevantNodeNameBKPF(name)) {
getDataBKPF = false;
bkpf.append("^");
}
if (isBSEG && name.equals("item")) {
bseg.append("\n");
}
if (!isBKPF || !name.equals("item"))
break;
bkpf.append("\n");
break;
}
case XMLStreamConstants.END_DOCUMENT: {
parser.close();
}
}
parser.next();
}
in.close();
}
private boolean isRelevantNodeNameBSEG(String name) {
return name.equals("GJAHR") || name.equals("BELNR") || name.equals("BUZEI") || name.equals("ZUONR")
|| name.equals("ANLN1");
}
private boolean isRelevantNodeNameBKPF(String name) {
return name.equals("GJAHR") || name.equals("BELNR") || name.equals("XBLNR");
}
}