001 package com.thaiopensource.validate.jarv; 002 003 import com.thaiopensource.util.PropertyMap; 004 import com.thaiopensource.validate.IncorrectSchemaException; 005 import com.thaiopensource.validate.Schema; 006 import com.thaiopensource.validate.SchemaReader; 007 import com.thaiopensource.validate.Validator; 008 import com.thaiopensource.validate.Option; 009 import com.thaiopensource.validate.AbstractSchema; 010 import org.iso_relax.verifier.VerifierConfigurationException; 011 import org.iso_relax.verifier.VerifierFactory; 012 import org.xml.sax.InputSource; 013 import org.xml.sax.SAXException; 014 015 import java.io.IOException; 016 017 public class VerifierFactorySchemaReader implements SchemaReader { 018 private final VerifierFactory vf; 019 020 static private class SchemaImpl extends AbstractSchema { 021 final org.iso_relax.verifier.Schema schema; 022 023 private SchemaImpl(org.iso_relax.verifier.Schema schema) { 024 this.schema = schema; 025 } 026 027 public Validator createValidator(PropertyMap properties) { 028 try { 029 return new VerifierValidator(schema.newVerifier(), properties); 030 } 031 catch (VerifierConfigurationException e) { 032 Exception cause = e.getCauseException(); 033 if (cause instanceof RuntimeException 034 && (e.getMessage() == null || e.getMessage().equals(cause.getMessage()))) 035 throw (RuntimeException)cause; 036 throw new JarvConfigurationException(e); 037 } 038 } 039 } 040 041 public VerifierFactorySchemaReader(VerifierFactory vf) { 042 this.vf = vf; 043 } 044 045 public Schema createSchema(InputSource in, PropertyMap properties) 046 throws IOException, SAXException, IncorrectSchemaException { 047 try { 048 return new SchemaImpl(vf.compileSchema(in)); 049 } 050 catch (SAXException e) { 051 System.err.println("compileSchema threw a SAXException class " + e.getClass().toString()); 052 if (e.getException() != null) 053 System.err.println("cause has class " + e.getException().getClass().toString()); 054 throw e; 055 } 056 catch (VerifierConfigurationException e) { 057 for (;;) { 058 Exception cause = e.getCauseException(); 059 String message = e.getMessage(); 060 if (cause != null && message != null && message.equals(cause.getMessage())) 061 message = null; // don't really have a message 062 if (message == null) { 063 if (cause instanceof RuntimeException) 064 throw (RuntimeException)cause; 065 if (cause instanceof SAXException) 066 throw (SAXException)cause; 067 if (cause instanceof IOException) 068 throw (IOException)cause; 069 if (cause instanceof VerifierConfigurationException) { 070 e = (VerifierConfigurationException)cause; 071 continue; 072 } 073 } 074 throw new SAXException(message, cause); 075 } 076 } 077 078 } 079 080 public Option getOption(String uri) { 081 return null; 082 } 083 }