Hi,
I have an xml for which I have written the XSD. The validation code is my
servlet. My XML is not able to locate my XSD. They both are in the same
directory.
The servlet contains the method name validateCurrenciesXML which contains
the validation code.
The app server is weblogic. My classpath contains xerces.jar. JDK version is
j2sdk1.4.2_13

Please find attached all the requried files.

Please help

Thanks & Regards,

Amisha
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!--
        Currencies.xml
        
        This is the XML Schema used by Currencies.xml
        
        Author:  Amisha Popat

-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
        targetNamespace="http://www.ups.com/CurrenciesSchema";
        xmlns:tns="http://www.ups.com/CurrenciesSchema";>
        
 
<xs:element name="currencies" type="Currencies"/>

 <xs:complexType name="Currencies" >
  <xs:sequence>
   <xs:element name="currency" type="CurrencyType" minOccurs="1" 
maxOccurs="unbounded"/>
  </xs:sequence> 
 </xs:complexType>
 
 <xs:complexType name="CurrencyType" >
        <xs:attribute name="description" type="xs:string" use="required"/>
    <xs:attribute name="alpha" type="xs:string" use="required"/> 
        <xs:attribute name="numeric" type="xs:string" use="required"/>
        <xs:attribute name="decimalPlaces" type="xs:integer" use="required"/>  
 </xs:complexType>
        
     
</xs:schema>


<?xml version="1.0" encoding="ISO-8859-1" ?>

<currencies 
	xmlns="http://www.ups.com/currencies"; 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
	xsi:schemaLocation="http://www.ups.com/CurrenciesSchema /cclamp/home/drk5psp/config/pcs/currencies.xsd">

	<currency description="Austrailian Dollar" alpha="AUD" numeric="036" decimalPlaces="2"/>
	<currency description="Austria Schilling" alpha="ATS" numeric="040" decimalPlaces="2"/>
	<currency description="Belgian Franc" alpha="BEF" numeric="056" decimalPlaces="0"/>
	<currency description="Canadian Dollar" alpha="CAD" numeric="124" decimalPlaces="2"/>
	<currency description="Chilean Peso" alpha="CLP" numeric="152" decimalPlaces="2"/>
	<currency description="China Yuan Renminbi" alpha="CNY" numeric="156" decimalPlaces="0"/>
	<currency description="China Yuan Renminbi" alpha="RMB" numeric="156" decimalPlaces="0"/>
	<currency description="Colombian Peso" alpha="COP" numeric="170" decimalPlaces="2"/>
	<currency description="Czech Koruna" alpha="CZK" numeric="203" decimalPlaces="2"/>
	<currency description="Danish Krone" alpha="DKK" numeric="208" decimalPlaces="2"/>
	<currency description="Finland Markka" alpha="FIM" numeric="246" decimalPlaces="2"/>
	<currency description="French Franc" alpha="FRF" numeric="250" decimalPlaces="2"/>
	<currency description="German Deutsche Mark" alpha="DEM" numeric="280" decimalPlaces="2"/>
	<currency description="Greek Drachma" alpha="GRD" numeric="300" decimalPlaces="0"/>
	<currency description="Hong Kong Dollar" alpha="HKD" numeric="344" decimalPlaces="2"/>
	<currency description="Hungarian Forint" alpha="HUF" numeric="348" decimalPlaces="2"/>
	<currency description="Indian Rupee" alpha="INR" numeric="356" decimalPlaces="2"/>
	<currency description="Indonesian Rupiah" alpha="IDR" numeric="360" decimalPlaces="2"/>
	<currency description="Irish Pound" alpha="IEP" numeric="372" decimalPlaces="2"/>
	<currency description="New Israeli Sheqel" alpha="ILS" numeric="376" decimalPlaces="2"/>
	<currency description="Italian Lira" alpha="ITL" numeric="380" decimalPlaces="0"/>
	<currency description="Japanese Yen" alpha="JPY" numeric="392" decimalPlaces="0"/>
	<currency description="Korean Won" alpha="KRW" numeric="410" decimalPlaces="0"/>
	<currency description="Malaysian Ringgit" alpha="MYR" numeric="458" decimalPlaces="2"/>
	<currency description="Mexican Peso" alpha="MXN" numeric="484" decimalPlaces="2"/>
	<currency description="Netherlands Guilder" alpha="NLG" numeric="528" decimalPlaces="2"/>
	<currency description="New Zealand Dollar" alpha="NZD" numeric="554" decimalPlaces="2"/>
	<currency description="Norwegian Krone" alpha="NOK" numeric="578" decimalPlaces="2"/>
	<currency description="Philippine Peso" alpha="PHP" numeric="608" decimalPlaces="2"/>
	<currency description="Portuguese Escudo" alpha="PTE" numeric="620" decimalPlaces="0"/>
	<currency description="Singapore Dollar" alpha="SGD" numeric="702" decimalPlaces="2"/>
	<currency description="Spanish Peseta" alpha="ESP" numeric="724" decimalPlaces="0"/>
	<currency description="Swedish Krona" alpha="SEK" numeric="752" decimalPlaces="2"/>
	<currency description="Swiss Franc" alpha="CHF" numeric="756" decimalPlaces="2"/>
	<currency description="Thailand Baht" alpha="THB" numeric="764" decimalPlaces="2"/>
	<currency description="United Arab Emirates Dirham" alpha="AED" numeric="784" decimalPlaces="2"/>
	<currency description="Turkish Lira" alpha="TRL" numeric="792" decimalPlaces="2"/>
	<currency description="British Pound Sterling" alpha="GBP" numeric="826" decimalPlaces="2"/>
	<currency description="US Dollar" alpha="USD" numeric="840" decimalPlaces="2"/>
	<currency description="Venezuelan Bolivar" alpha="VEB" numeric="862" decimalPlaces="2"/>
	<currency description="New Taiwan Dollar" alpha="TWD" numeric="901" decimalPlaces="2"/>
	<currency description="Euro" alpha="EUR" numeric="978" decimalPlaces="2"/>
	<currency description="Polish Zloty" alpha="PLN" numeric="985" decimalPlaces="2"/>
	<currency description="Brazilian Real" alpha="BRL" numeric="986" decimalPlaces="2"/>
	<currency description="Vietnam Dong" alpha="VND" numeric="704" decimalPlaces="2"/>
	<currency description="Macao Pataca" alpha="MOP" numeric="446" decimalPlaces="2"/>
	<currency description="Russian Ruble" alpha="RUB" numeric="643" decimalPlaces="2"/>
</currencies>
package com.ups.paymentcomponent;

import javax.servlet.http.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.io.*;
import java.util.*;

import com.ups.webappcommon.logging.log4jcompatible.*;
import com.ups.paymentcomponent.fdmspaymancassette.PCSConfigurator;
import org.apache.commons.digester.*;
import org.apache.commons.collections.*;
import com.ups.paymentcomponent.fdmspaymancassette.Client;
import com.ups.paymentcomponent.fdmspaymancassette.ClientCurrency;
import com.ups.paymentcomponent.fdmspaymancassette.ClientCard;

import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.SAXParseException;

public class PCSCurrencyServlet extends HttpServlet
{
        public static final Logger logger = Logger.getLogger
        ("com.ups.paymentcomponent.PCSCurrencyServlet");
        private static HashMap cardAllow = new HashMap();
        private static HashMap cardDeny = new HashMap();
        private static Enumeration enumAllow;

        PCSConfigurator clientConfigurations = null;    
        String clientConfigDir = null;                  
        String currenciesConfigFile = null;     
        String currenciesXsdFile = null;
        //Variables added for validating the XML through Schema
        String parserClass = "org.apache.xerces.parsers.SAXParser";
    String validationFeature
       = "http://xml.org/sax/features/validation";;
    String schemaFeature
       = "http://apache.org/xml/features/validation/schema";;

        public void init(ServletConfig sc) throws ServletException      
        {       
                try
                {                                               
                        logger.log(UPSLevel.INFO,"Begin CurrencyServlet 
Initializing Payment Server");                  

                        Properties props = new Properties();
                        props.load(new 
FileInputStream(System.getProperty(("pcs.currencyservlet.config.file"))));
                        clientConfigDir = props.getProperty("clientConfigDir");
                        currenciesConfigFile = 
props.getProperty("currenciesConfigFile");       
                        currenciesXsdFile = 
props.getProperty("currenciesXsdFile");
                        logger.log(UPSLevel.INFO, "testing the schema 
validation");
                        //Method invoked to validate the currecies.xml file.
                        validateCurrenciesXML(currenciesConfigFile);
                        //Method invoked to validate the client Config xml 
files.
                        validateClientXML();
                        readClientConfigData();
                        readCurrencies();
                        clientConfigurations.setFast();                         
                                                                                
                        Properties propAllow = new Properties();
                        Enumeration enumAllow = propAllow.keys();
                        List allowList; 
                        propAllow.load(new 
FileInputStream(System.getProperty("pcs.cards.allow.file")));

                        while (enumAllow.hasMoreElements()) {
                                String propName = (String) 
enumAllow.nextElement();
                                String tmp = 
(String)propAllow.getProperty(propName);
                                allowList = new ArrayList();
                                StringTokenizer st = new StringTokenizer(tmp, 
":");
                                cardAllow.put(propName, allowList);
                                while (st.hasMoreTokens()) 
allowList.add(st.nextToken());
                        }
                        Properties propDeny = new Properties();
                        Enumeration enumDeny = propDeny.keys();
                        List denyList;
                
                        propDeny.load(new 
FileInputStream(System.getProperty("pcs.cards.deny.file")));

                        while (enumDeny.hasMoreElements()) {
                                String propName = (String) 
enumDeny.nextElement();
                                String tmp = 
(String)propDeny.getProperty(propName);
                                denyList = new ArrayList();
                                StringTokenizer st = new StringTokenizer(tmp, 
":");
                                cardDeny.put(propName, denyList);
                                while (st.hasMoreTokens()) 
denyList.add(st.nextToken());
                        }

                        logger.log(UPSLevel.INFO,"End Servlet Initializing 
Payment Server");
                }
                catch(Exception e)
                {
                        e.printStackTrace();
                }                                               
        }       

        public void doGet(HttpServletRequest req,HttpServletResponse resp)
        throws ServletException,java.io.IOException     
        {
                PrintWriter out = null;
                String cr = "\r\n"; 
                StringBuffer dtd = new StringBuffer();
                try
                {       
                        out = resp.getWriter();                                 
                
                        dtd.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
+ cr);
                        dtd.append("<!DOCTYPE merchantdata [<!ELEMENT 
merchantdata (currency)*>" + cr);
                        dtd.append("<!ELEMENT currency 
(code,codeAlpha,floorlimit,decimalPlaces,cards)*>" + cr);                    
                        dtd.append("<!ELEMENT code (#PCDATA)>" + cr);   
                        dtd.append("<!ELEMENT codeAlpha (#PCDATA)>" + cr);      
                    
                        dtd.append("<!ELEMENT floorlimit (#PCDATA)>" + cr);     
        
                        dtd.append("<!ELEMENT decimalPlaces (#PCDATA)>" + cr);  
            
                        dtd.append("<!ELEMENT cards (cardtype+)>" + cr);        
            
                        dtd.append("<!ELEMENT cardtype (#PCDATA)>" + cr);
                        dtd.append("<!ATTLIST cardtype" + cr);
                        dtd.append("  merchantid CDATA #REQUIRED" + cr);
                        dtd.append(">" + cr);
                        dtd.append("]>" + cr);   

                        Client c = 
clientConfigurations.getClient(req.getParameter("applicationId"));

                        if (c == null)
                        {
                                throw new Exception("Invalid Client");  
                        }

                        String country = req.getParameter("country");

                        StringBuffer sb = new StringBuffer();

                        Vector clientCurrs = c.getCurrencies();
                        int cSize = clientCurrs.size();


                        sb.append("<merchantdata>" + cr);                       
                
                        for (int j=0;j<cSize;j++)
                        {                                       
                                sb.append("<currency>" + cr);
                                ClientCurrency curr = 
                                        
(ClientCurrency)clientCurrs.elementAt(j);

                                sb.append
                                ("<code>" + 
                                                
clientConfigurations.getCurrencyNumeric
                                                (curr.getAlphaCode())
                                                + "</code>" + cr);              
                                        

                                sb.append("<codeAlpha>" + curr.getAlphaCode() + 
                                                "</codeAlpha>" + cr);           
                                                        

                                sb.append("<floorlimit>" + curr.getFloorLimit() 
+
                                                "</floorlimit>" + cr);          
                                                                                
                                                                                
                                                

                                sb.append("<decimalPlaces>" + 
                                                
clientConfigurations.getCurrencyDecimalPlaces
                                                (curr.getAlphaCode()) +
                                                "</decimalPlaces>" + cr);

                                Vector cards = curr.getCards();
                                Vector temp = new Vector();
                                int cardsSize = cards.size();

                                sb.append("<cards>" + cr);
                                for (int x=0;x<cardsSize;x++)
                                {                                               
                        
                                        ClientCard cc = 
(ClientCard)cards.elementAt(x);
                                        
                                        //RFC 3259 - Added Country
                                        boolean allowCard = false;
                                        if (country == null) {
                                                allowCard = true;
                                        }
                                        else {
                                                List allow = 
(List)cardAllow.get(cc.getName());
                                                List deny = 
(List)cardDeny.get(cc.getName());
                                                /*
                                                 * Filter the card list by 
country.
                                                 * If there is NOT an allow 
list for the card, or there is an allow list for the card and the country 
                                                 * matches then return the card.
                                                 * However, if there is NOT a 
deny list for the card, or there is a deny list for the card, 
                                                 * and the country matches then 
do NOT return the card.
                                                 */
                                                if (((allow == null) || 
allow.contains(country) ) 
                                                                && ((deny == 
null) || !(deny.contains(country))) ) {
                                                        allowCard = true;
                                                }
                                        }

                                                sb.append("<cardtype>");
                                                sb.append(cc.getName() + " 
merchantid=");
                                                if (!allowCard) {
                                                        
sb.append("XXXXXXXXXXX");
                                                }
                                                else if (cc.getEnabled())
                                                {
                                                        
sb.append("00000000000");
                                                }               
                                                else
                                                {
                                                        
sb.append("ZZZZZZZZZZZ");
                                                }
                                                sb.append("</cardtype>" + cr);
                                
                                }
                                sb.append("</cards>" + cr);             
                                sb.append("</currency>" + cr);
                        }
                        sb.append("</merchantdata>" + cr);      

                        out.print(dtd.toString());
                        out.print(sb.toString());                               
            
                        out.close();    
                }
                catch(Exception e)
                {                       
                        StringBuffer sb = new StringBuffer();

                        sb.append("<merchantdata>" + cr);
                        sb.append("</merchantdata>" + cr);

                        out.print(dtd.toString());
                        out.print(sb.toString());               

                        logger.log
                        (UPSLevel.SEVERE,"doGet() Error: " + e.toString());     
                                
                }
        }       
        
        void readClientConfigData() throws Exception
        {
                try
                {
                        clientConfigurations = new PCSConfigurator();
                        File configDir = new File(clientConfigDir);
                        if (configDir.isDirectory())
                        {
                                String [] clientConfigFiles = configDir.list();

                                for (int i=0;i<clientConfigFiles.length;i++)
                                {
                                        File temp = new File
                                        (clientConfigDir,clientConfigFiles[i]);

                                        if (temp.isFile() && 
temp.getName().endsWith(".xml"))
                                        {
                                                Digester digester = new 
Digester();     
                                                
digester.push(clientConfigurations);

                                                
digester.addObjectCreate("clientdata/client",
                                                
"com.ups.paymentcomponent.fdmspaymancassette.Client");
                                                
digester.addSetProperties("clientdata/client");
                                                digester.addSetNext
                                                
("clientdata/client","addClient",
                                                
"com.ups.paymentcomponent.fdmspaymancassette.Client");                          
                                                                        

                                                
digester.addObjectCreate("clientdata/client/currency",
                                                
"com.ups.paymentcomponent.fdmspaymancassette.ClientCurrency");                  
        
                                                
digester.addSetProperties("clientdata/client/currency");
                                                digester.addSetNext
                                                
("clientdata/client/currency","addClientCurrency",
                                                
"com.ups.paymentcomponent.fdmspaymancassette.ClientCurrency");

                                                
digester.addCallMethod("clientdata/client/currency/floorLimit","setFloorLimit", 
1);     
                                                
digester.addCallParam("clientdata/client/currency/floorLimit", 0);              
                        

                                                
digester.addCallMethod("clientdata/client/currency/divisionNumber","setDivisionNumber",
 1);     
                                                
digester.addCallParam("clientdata/client/currency/divisionNumber", 0);          
                                                        

                                                
digester.addObjectCreate("clientdata/client/currency/cards/cardType",
                                                
"com.ups.paymentcomponent.fdmspaymancassette.ClientCard");                      
        
                                                
digester.addSetProperties("clientdata/client/currency/cards/cardType");
                                                digester.addSetNext
                                                
("clientdata/client/currency/cards/cardType","addClientCard",
                                                
"com.ups.paymentcomponent.fdmspaymancassette.ClientCard");                      
        

                                                
logger.log(UPSLevel.INFO,"Digesting " + temp);

                                                digester.parse(new 
FileInputStream(temp));                                      
                                        }                                       
                                
                                }
                                clientConfigurations.setFast();
                        }               
                }
                catch(Exception e)
                {               
                        logger.log
                        (UPSLevel.SEVERE,"Error retrieving client config data: 
" + e.toString());               
                }                       
        } 

        
        void readCurrencies() throws CCAuthorizationException
        {
                try
                {
                        Digester digester = new Digester();     
                        digester.push(clientConfigurations);

                        
digester.addCallMethod("currencies/currency","addCurrency", 4); 
                        digester.addCallParam("currencies/currency", 
0,"description");          
                        digester.addCallParam("currencies/currency", 
1,"alpha");                
                        digester.addCallParam("currencies/currency", 
2,"numeric");                                                          
                        digester.addCallParam("currencies/currency", 
3,"decimalPlaces");                                                            

                        digester.parse(new 
FileInputStream(currenciesConfigFile));              
                }
                catch(Exception e)
                {
                        e.printStackTrace();

                        logger.log
                        (UPSLevel.SEVERE,"Error retrieving currency data: " + 
e.toString());            
                }       
        }               
        
        //Method added for validating currecies.XML file with schema
        private void validateCurrenciesXML(String currencyFile) throws Exception
        {
                logger.log(UPSLevel.INFO,"validateCurrenciesXML method is 
invoked:");
                      
              try {
                 XMLReader r = XMLReaderFactory.createXMLReader(parserClass);
                 r.setFeature(validationFeature,true);
                 r.setFeature(schemaFeature,true);
                 //r.setErrorHandler(new XmlErrorHandlerException());
                 logger.log(UPSLevel.INFO,"properties are to be set");
                // 
r.setProperty("http://apache.org/xml/properties/external-NamespaceScemaLocation";,
                        // "http://www.ups.com 
http://www.ups.com/currenciesXsdFile";);
                 logger.log(UPSLevel.INFO,"properties are set");
                 r.parse(currencyFile);
                 logger.info("Currencies File"+ currencyFile.toString());
                 logger.log(UPSLevel.INFO, "Parse of the Currencies file is 
completed");
              } catch (SAXParseException e) {
                 logger.log(UPSLevel.INFO, "SaxException thrown for currency 
file"); 
                 logger.log(UPSLevel.INFO,"   Public ID: "+e.getPublicId());
                 logger.log(UPSLevel.INFO,"   System ID: "+e.getSystemId());
                 logger.log(UPSLevel.INFO,"   Line number: "+e.getLineNumber());
                 logger.log(UPSLevel.INFO,"   Column number: 
"+e.getColumnNumber());
                 logger.log(UPSLevel.INFO,"   Message: "+e.getMessage());;
              } catch (IOException e) {
                  logger.log(UPSLevel.INFO, "IOException thrown for currency 
file");
                  logger.log(UPSLevel.SEVERE,e.toString());
              }
             
        }

        //Method added for validating client config XML files with schema
        private void validateClientXML() throws Exception
        {
                logger.log(UPSLevel.INFO,"validateClientXML method is 
invoked:");
                File SingleXmlFile = null;    
              try {
                        File configDir = new File(clientConfigDir);
                                if (configDir.isDirectory())
                                {
                                        String [] clientConfigFiles = 
configDir.list();

                                        for (int 
i=0;i<clientConfigFiles.length;i++)
                                        {
                                                SingleXmlFile = new File
                                                
(clientConfigDir,clientConfigFiles[i]);

                                                if (SingleXmlFile.isFile() && 
SingleXmlFile.getName().endsWith(".xml"))
                                                {
                                                 XMLReader r = 
XMLReaderFactory.createXMLReader(parserClass);
                                                 
r.setFeature(validationFeature,true);
                                                 
r.setFeature(schemaFeature,true);
                                                 //r.setErrorHandler(new 
XmlErrorHandlerException());
                                                 
r.parse(SingleXmlFile.toString());
                                                 
logger.log(UPSLevel.INFO,"Parsing of " + SingleXmlFile.getName()+ " file is 
completed");
                                                }
                                        }
                                }
                                } catch (SAXParseException e) {
                                        logger.log(UPSLevel.INFO, "SaxException 
thrown for " + SingleXmlFile.getName()+ "client file");
                                        logger.log(UPSLevel.INFO,"   Public ID: 
"+e.getPublicId());
                                logger.log(UPSLevel.INFO,"   System ID: 
"+e.getSystemId());
                                logger.log(UPSLevel.INFO,"   Line number: 
"+e.getLineNumber());
                                logger.log(UPSLevel.INFO,"   Column number: 
"+e.getColumnNumber());
                                logger.log(UPSLevel.INFO,"   Message: 
"+e.getMessage());
                            } catch (IOException e) {
                                logger.log(UPSLevel.INFO, "IOException thrown 
for client file");
                              logger.log(UPSLevel.SEVERE,e.toString());
                            }
        }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to