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