📄 genericvalidatingpackager.java
字号:
/* * jPOS Project [http://jpos.org] * Copyright (C) 2000-2008 Alejandro P. Revilla * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */package org.jpos.iso.packager;import java.io.InputStream;import java.util.Enumeration;import java.util.Hashtable;import java.util.Properties;import java.util.Stack;import java.util.Vector;import org.jpos.core.ConfigurationException;import org.jpos.core.SimpleConfiguration;import org.jpos.iso.ISOBasePackager;import org.jpos.iso.ISOBaseValidator;import org.jpos.iso.ISOComponent;import org.jpos.iso.ISOException;import org.jpos.iso.ISOFieldPackager;import org.jpos.iso.ISOFieldValidator;import org.jpos.iso.ISOMsg;import org.jpos.iso.ISOMsgFieldPackager;import org.jpos.iso.ISOMsgFieldValidator;import org.jpos.iso.ISOValidator;import org.jpos.iso.validator.ISOVException;import org.jpos.util.LogEvent;import org.jpos.util.Logger;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;import org.xml.sax.helpers.XMLReaderFactory;/** * Generic Packager that configure validators too. * <p>Title: jPOS</p> * <p>Description: Java Framework for Financial Systems</p> * <p>Copyright: Copyright (c) 2000 jPOS.org. All rights reserved.</p> * <p>Company: www.jPOS.org</p> * @author Jose Eduardo Leon * @version 1.0 */public class GenericValidatingPackager extends GenericPackager implements ISOValidator { public GenericValidatingPackager( ) throws ISOException{ super(); } public GenericValidatingPackager( String fileName ) throws ISOException { super( fileName ); } public GenericValidatingPackager (InputStream stream) throws ISOException { super (stream); } /** * Convert the ISOFieldPackagers in the Hashtable * to an array of ISOFieldPackagers */ private ISOFieldPackager[] makeFieldArray(Hashtable tab) { int maxField = 0; // First find the largest field number in the Hashtable for (Enumeration e=tab.keys(); e.hasMoreElements(); ) { int n = ((Integer)e.nextElement()).intValue(); if (n > maxField) maxField = n; } // Create the array ISOFieldPackager fld[] = new ISOFieldPackager[maxField+1]; // Populate it for (Enumeration e=tab.keys(); e.hasMoreElements(); ) { Integer key = (Integer) e.nextElement(); fld[key.intValue()] = (ISOFieldPackager)tab.get(key); } return fld; } /** * It define GenericValidatorContentHandler like handler. */ public void readFile(String filename) throws org.jpos.iso.ISOException { try { XMLReader reader = XMLReaderFactory.createXMLReader( System.getProperty( "sax.parser", "org.apache.crimson.parser.XMLReaderImpl")); reader.setFeature ("http://xml.org/sax/features/validation", true); GenericValidatorContentHandler handler = new GenericValidatorContentHandler(); reader.setContentHandler(handler); reader.setErrorHandler(handler); reader.parse(filename); } catch (Exception e) { e.printStackTrace(); throw new ISOException(e); } } protected void setGenericPackagerParams ( Attributes atts ) { String maxField = atts.getValue( "maxValidField" ); String emitBmap = atts.getValue( "emitBitmap" ); String bmapfield = atts.getValue( "bitmapField" ); if ( maxField != null ) maxValidField = Integer.parseInt( maxField ); if ( emitBmap != null ) emitBitmap = Boolean.valueOf( emitBmap ).booleanValue(); if ( bmapfield != null ) bitmapField = Integer.parseInt( bmapfield ); } public void setMsgValidator( ISOBaseValidator[] msgVlds ){ this.mvlds = msgVlds; } public void setFieldValidator( ISOFieldValidator[] fvlds ){ this.fvlds = fvlds; } public ISOComponent validate(ISOComponent m) throws ISOException { LogEvent evt = new LogEvent( this, "validate" ); try { ISOComponent c; Hashtable fields = ((ISOMsg)m).getChildren(); /** Field validations **/ for (int i=0; i < fvlds.length; i++) { if ( fvlds[i] != null && (c=(ISOComponent) fields.get (new Integer ( ((ISOFieldValidator)fvlds[i]).getFieldId() ))) != null ){ try { m.set( fvlds[i].validate( c ) ); } catch ( ISOVException e ) { if ( !e.treated() ) { m.set( e.getErrComponent() ); e.setTreated( true ); } evt.addMessage( "Component Validation Error." ); throw e; } } } /** msg validations **/ try { if ( mvlds != null ){ for (int i = 0; i < this.mvlds.length; i++) { if ( mvlds[i] != null ) m = mvlds[i].validate( m ); } } } catch (ISOVException ex) { evt.addMessage( "Component Validation Error." ); throw ex; } return m; } finally { Logger.log( evt ); } }/* Values copied from ISOBasePackagerThese can be changes using attributes on the isopackager node */ protected int maxValidField=128; protected boolean emitBitmap=true; protected int bitmapField=1; /** FieldValidator array. **/ protected ISOValidator[] fvlds; /** MsgValidator array **/ protected ISOBaseValidator[] mvlds; /** incr used to put validators in the same hashtable of * fieldpackagers. packagers will stay on index 1, 2, 3... * and validators in inc+1, inc+2, inc+3,... **/ final int inc = 500; public class GenericValidatorContentHandler extends DefaultHandler { public void startDocument(){ fieldStack = new Stack(); validatorStack = new Stack(); } public void endDocument() throws SAXException { if ( !fieldStack.isEmpty() ) throw new SAXException ( "Format error in XML Field Description File" ); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts ) throws SAXException { try { if ( localName.equals( "isopackager" ) ) { // Stick a new Hashtable on stack to collect the fields fieldStack.push( new Hashtable() ); /** used to insert msg-level validators **/ Hashtable hash = new Hashtable(); hash.put( new Integer( VALIDATOR_INDEX ), new Vector() ); validatorStack.push( hash ); setGenericPackagerParams ( atts ); } if (localName.equals("isofield")){ /** getID global for isofieldvalidator **/ fldID = atts.getValue("id"); String type = atts.getValue("class"); String name = atts.getValue("name");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -