genericvalidatingpackager.java
来自「java pos,你可以直接编译运行,」· Java 代码 · 共 482 行 · 第 1/2 页
JAVA
482 行
/** Copyright (c) 2000 jPOS.org. All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** 1. Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in* the documentation and/or other materials provided with the* distribution.** 3. The end-user documentation included with the redistribution,* if any, must include the following acknowledgment:* "This product includes software developed by the jPOS project* (http://www.jpos.org/)". Alternately, this acknowledgment may* appear in the software itself, if and wherever such third-party* acknowledgments normally appear.** 4. The names "jPOS" and "jPOS.org" must not be used to endorse* or promote products derived from this software without prior* written permission. For written permission, please contact* license@jpos.org.** 5. Products derived from this software may not be called "jPOS",* nor may "jPOS" appear in their name, without prior written* permission of the jPOS project.** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.* IN NO EVENT SHALL THE JPOS PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE* POSSIBILITY OF SUCH DAMAGE.* ====================================================================** This software consists of voluntary contributions made by many* individuals on behalf of the jPOS Project. For more* information please see <http://www.jpos.org/>.*/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.xerces.parsers.SAXParser")); 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(); int len = 0; int first = 0; byte[] b; /** 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 {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?