Started working on maven plugin and refactored the cel language loader.

This commit is contained in:
Willem Cazander 2013-04-11 09:26:38 +02:00
parent 661ac8079e
commit 6f45317753
30 changed files with 913 additions and 288 deletions

View file

@ -146,6 +146,12 @@ public final class X4ODriverManager {
}
static public void registerX4ODriver(X4ODriver<?> driver) {
if (driver.getLanguageName()==null) {
throw new NullPointerException("Error in driver impl languageName is null in: "+driver.getClass());
}
if (driver.getLanguageVersions()==null) {
throw new NullPointerException("Error in driver impl languageVersions is null in: "+driver.getClass());
}
instance.drivers.put(driver.getLanguageName(), driver);
}

View file

@ -45,6 +45,6 @@ public class CelDriver extends X4ODriver<X4OLanguageModule> {
@Override
public String[] getLanguageVersions() {
return null;
return LANGUAGE_VERSIONS;
}
}

View file

@ -23,11 +23,11 @@
package org.x4o.xml.eld;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.x4o.xml.conv.ObjectConverter;
import org.x4o.xml.conv.text.ClassConverter;
import org.x4o.xml.eld.lang.BeanElement;
import org.x4o.xml.eld.lang.DescriptionElement;
import org.x4o.xml.eld.lang.ElementClassAddParentElement;
@ -37,19 +37,20 @@ import org.x4o.xml.eld.lang.ElementInterfaceBindingHandler;
import org.x4o.xml.eld.lang.ElementModuleBindingHandler;
import org.x4o.xml.eld.lang.ElementNamespaceContextBindingHandler;
import org.x4o.xml.eld.lang.ModuleElement;
import org.x4o.xml.element.DefaultElementClass;
import org.x4o.xml.element.ElementBindingHandler;
import org.x4o.xml.element.ElementClass;
import org.x4o.xml.element.ElementClassAttribute;
import org.x4o.xml.element.ElementNamespaceContext;
import org.x4o.xml.element.ElementNamespaceInstanceProvider;
import org.x4o.xml.element.ElementNamespaceInstanceProviderException;
import org.x4o.xml.lang.X4OLanguage;
import org.x4o.xml.lang.X4OLanguageLocal;
import org.x4o.xml.lang.X4OLanguageClassLoader;
import org.x4o.xml.lang.X4OLanguageModule;
import org.x4o.xml.lang.X4OLanguageModuleLoader;
import org.x4o.xml.lang.X4OLanguageModuleLoaderException;
import org.x4o.xml.lang.X4OLanguage;
import org.x4o.xml.lang.X4OLanguageClassLoader;
import org.x4o.xml.lang.X4OLanguageLocal;
/**
* EldModuleLoaderCore provides a few basic elements for the core eld x4o language.
@ -85,47 +86,121 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
* @param elementLanguageModule The module to load it in.
* @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.element.ElementLanguage, org.x4o.xml.lang.X4OLanguageModule)
*/
public void loadLanguageModule(X4OLanguageLocal language,X4OLanguageModule elementLanguageModule) throws X4OLanguageModuleLoaderException {
public void loadLanguageModule(X4OLanguageLocal language,X4OLanguageModule languageModule) throws X4OLanguageModuleLoaderException {
elementLanguageModule.setId("cel-module");
elementLanguageModule.setName("Core Element Languag Module");
elementLanguageModule.setProviderName(PP_CEL_PROVIDER);
// Config module meta data
configLanguageModule(languageModule);
List<ElementClass> elementClassList = new ArrayList<ElementClass>(10);
elementClassList.add(new DefaultElementClass("attribute",language.getLanguageConfiguration().getDefaultElementClassAttribute()));
elementClassList.add(new DefaultElementClass("classConverter",ClassConverter.class));
// Config language
addBindingHandler(languageModule,new ElementClassBindingHandler(),"cel-class-bind","Binds the ElementClass childeren.");
addBindingHandler(languageModule,new ElementModuleBindingHandler(),"cel-module-bind","Binds the LanguageModule childeren.");
addBindingHandler(languageModule,new ElementClassAttributeBindingHandler(),"cel-class-attr-bind","Binds the ElementClassAttribute childeren.");
addBindingHandler(languageModule,new ElementInterfaceBindingHandler(),"cel-interface-bind","Binds the ElementInterface childeren.");
addBindingHandler(languageModule,new ElementNamespaceContextBindingHandler(),"cel-namespace-bind","Binds the Namespace childeren.");
createElementClasses(elementClassList,language); // adds all meta info
// Create cel-lang namespace in language
ElementNamespaceContext namespace = createNamespaceContext(language,CEL_CORE,CEL_CORE_URI,CEL_CORE_XSD_URI,CEL_CORE_XSD_FILE,CEL_CORE);
configElementClasses(language,namespace);
startAndAddNamespace(language,languageModule,namespace);
// Create cel-root namespace in language for schema support
ElementNamespaceContext namespaceRoot = createNamespaceContext(language,CEL_ROOT,CEL_ROOT_URI,CEL_ROOT_XSD_URI,CEL_ROOT_XSD_FILE,CEL_ROOT);
namespaceRoot.setLanguageRoot(true); // Only define single language root so xsd is (mostly) not cicle import.
ElementClass rootElement = createElementClass(language,"module",language.getLanguageConfiguration().getDefaultElementLanguageModule(),ModuleElement.class,"The module tag is the root xml element for ELD language.");
namespaceRoot.addElementClass(rootElement);
startAndAddNamespace(language,languageModule,namespaceRoot);
}
/**
* Adds only Element class beans which need extra meta info for schema.
*
* @param elementClassList The list to fill.
* @throws X4OLanguageModuleLoaderException
*/
private void configElementClasses(X4OLanguage language,ElementNamespaceContext namespace) throws X4OLanguageModuleLoaderException {
ElementClass ec = null;
ElementClassAttribute attr;
namespace.addElementClass(createElementClass(language,"attribute",language.getLanguageConfiguration().getDefaultElementClassAttribute(),null,"Defines xml element attribute."));
namespace.addElementClass(createElementClass(language,"classConverter",ClassConverter.class,null,"Converts string attribute to java class instance."));
DefaultElementClass ns = new DefaultElementClass("namespace",language.getLanguageConfiguration().getDefaultElementNamespaceContext());
attr = newElementClassAttribute(language);
attr.setName("uri");
attr.setRequired(true);
ns.addElementClassAttribute(attr);
elementClassList.add(ns);
ec = createElementClass(language,"namespace",language.getLanguageConfiguration().getDefaultElementNamespaceContext(),null,"Defines an xml namespace.");
ec.addElementClassAttribute(createElementClassAttribute(language,"uri",true,null));
namespace.addElementClass(ec);
DefaultElementClass dec = new DefaultElementClass("element",language.getLanguageConfiguration().getDefaultElementClass());
attr = newElementClassAttribute(language);
attr.setName("objectClass");
attr.setObjectConverter(new ClassConverter());
dec.addElementClassAttribute(attr);
ec = createElementClass(language,"element",language.getLanguageConfiguration().getDefaultElementClass(),null,"Defines xml element tag.");
ec.addElementClassAttribute(createElementClassAttribute(language,"objectClass",false,new ClassConverter()));
ec.addElementClassAttribute(createElementClassAttribute(language,"elementClass",false,new ClassConverter()));
namespace.addElementClass(ec);
attr = newElementClassAttribute(language);
attr.setName("elementClass");
attr.setObjectConverter(new ClassConverter());
dec.addElementClassAttribute(attr);
elementClassList.add(dec);
ec = createElementClass(language,"elementInterface",language.getLanguageConfiguration().getDefaultElementInterface(),null,"Defines element interface class.");
ec.addElementClassAttribute(createElementClassAttribute(language,"interfaceClass",false,new ClassConverter()));
namespace.addElementClass(ec);
DefaultElementClass ec = new DefaultElementClass("elementInterface",language.getLanguageConfiguration().getDefaultElementInterface());
attr = newElementClassAttribute(language);
attr.setName("interfaceClass");
attr.setObjectConverter(new ClassConverter());
ec.addElementClassAttribute(attr);
elementClassList.add(ec);
ec = createElementClass(language,"bindingHandler",null,BeanElement.class,"Defines generic binding handler for languge.");
ec.addElementParent(CEL_ROOT_URI, "module");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
ec.addElementClassAttribute(createElementClassAttribute(language,"id",true,null));
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
namespace.addElementClass(ec);
logger.finer("Creating eldcore namespace.");
ec = createElementClass(language,"attributeHandler",null,BeanElement.class,"Defines generic attribute handler for language.");
ec.addElementParent(CEL_ROOT_URI, "module");
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
namespace.addElementClass(ec);
ec = createElementClass(language,"configurator",null,BeanElement.class,"Define generic configurator for language.");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
ec.addElementParent(CEL_CORE_URI, "element");
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
ec.addElementClassAttribute(createElementClassAttribute(language,"configAction",false,null));
namespace.addElementClass(ec);
ec = createElementClass(language,"configuratorGlobal",null,BeanElement.class,"Define generic global configuator for languge.");
ec.addElementParent(CEL_ROOT_URI, "module");
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
ec.addElementClassAttribute(createElementClassAttribute(language,"configAction",false,null));
namespace.addElementClass(ec);
ec = createElementClass(language,"description",null,DescriptionElement.class,"Adds description as text on all eld elements.");
ec.setSchemaContentBase("string");
ec.addElementParent(CEL_ROOT_URI, "module");
ec.addElementParent(CEL_CORE_URI, "namespace");
ec.addElementParent(CEL_CORE_URI, "attributeHandler");
ec.addElementParent(CEL_CORE_URI, "bindingHandler");
ec.addElementParent(CEL_CORE_URI, "configurator");
ec.addElementParent(CEL_CORE_URI, "configuratorGlobal");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
ec.addElementParent(CEL_CORE_URI, "element");
ec.addElementParent(CEL_CORE_URI, "attribute");
namespace.addElementClass(ec);
ec = createElementClass(language,"elementParent",null,ElementClassAddParentElement.class,"Added (meta) element parent.");
ec.addElementParent(CEL_CORE_URI, "element");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
ec.addElementClassAttribute(createElementClassAttribute(language,"tag",true,null));
ec.addElementClassAttribute(createElementClassAttribute(language,"uri",false,null));
namespace.addElementClass(ec);
}
private void configLanguageModule(X4OLanguageModule languageModule) {
languageModule.setId("cel-module");
languageModule.setName("Core Element Languag Module");
languageModule.setProviderName(PP_CEL_PROVIDER);
languageModule.setDescription("Core Element Language Module Loader");
languageModule.setSourceResource(this.getClass().getSimpleName()); // todo check if oke.
}
private void startAndAddNamespace(X4OLanguageLocal language,X4OLanguageModule languageModule,ElementNamespaceContext namespace) throws X4OLanguageModuleLoaderException {
try {
namespace.getElementNamespaceInstanceProvider().start(language, namespace);
} catch (ElementNamespaceInstanceProviderException e) {
throw new X4OLanguageModuleLoaderException(this,"Error starting instance provider: "+e.getMessage(),e);
}
languageModule.addElementNamespaceContext(namespace);
}
private ElementNamespaceContext createNamespaceContext(X4OLanguageLocal language,String id,String uri,String schemaUri,String schemaResource,String schemaPrefix) throws X4OLanguageModuleLoaderException {
logger.finer("Creating "+language.getLanguageName()+" namespace.");
ElementNamespaceContext namespace;
try {
namespace = (ElementNamespaceContext)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementNamespaceContext());
@ -144,143 +219,27 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
}
namespace.setId(CEL_CORE);
namespace.setUri(CEL_CORE_URI);
namespace.setSchemaUri(CEL_CORE_XSD_URI);
namespace.setSchemaResource(CEL_CORE_XSD_FILE);
namespace.setSchemaPrefix(CEL_CORE);
logger.finer("Loading elementClassList size: "+elementClassList.size());
for (ElementClass ecL:elementClassList) {
namespace.addElementClass(ecL);
}
addBindingHandler("cel-class-bind",new ElementClassBindingHandler(),elementLanguageModule);
addBindingHandler("cel-module-bind",new ElementModuleBindingHandler(),elementLanguageModule);
addBindingHandler("cel-class-attr-bind",new ElementClassAttributeBindingHandler(),elementLanguageModule);
addBindingHandler("cel-interface-bind",new ElementInterfaceBindingHandler(),elementLanguageModule);
addBindingHandler("cel-namespace-bind",new ElementNamespaceContextBindingHandler(),elementLanguageModule);
try {
namespace.getElementNamespaceInstanceProvider().start(language, namespace);
} catch (ElementNamespaceInstanceProviderException e) {
throw new X4OLanguageModuleLoaderException(this,"Error starting instance provider: "+e.getMessage(),e);
}
elementLanguageModule.addElementNamespaceContext(namespace);
// And define root
try {
namespace = (ElementNamespaceContext)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementNamespaceContext());
} catch (InstantiationException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
} catch (IllegalAccessException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
}
try {
namespace.setElementNamespaceInstanceProvider((ElementNamespaceInstanceProvider)
X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider())
);
} catch (InstantiationException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
} catch (IllegalAccessException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
}
namespace.setId(CEL_ROOT);
namespace.setUri(CEL_ROOT_URI);
namespace.setSchemaUri(CEL_ROOT_XSD_URI);
namespace.setSchemaResource(CEL_ROOT_XSD_FILE);
namespace.setSchemaPrefix(CEL_ROOT);
namespace.addElementClass(new DefaultElementClass("module",language.getLanguageConfiguration().getDefaultElementLanguageModule(),ModuleElement.class));
namespace.setLanguageRoot(true); // Only define single language root so xsd is (mostly) not cicle import.
try {
namespace.getElementNamespaceInstanceProvider().start(language, namespace);
} catch (ElementNamespaceInstanceProviderException e) {
throw new X4OLanguageModuleLoaderException(this,"Error starting instance provider: "+e.getMessage(),e);
}
elementLanguageModule.addElementNamespaceContext(namespace);
namespace.setId(id);
namespace.setUri(uri);
namespace.setSchemaUri(schemaUri);
namespace.setSchemaResource(schemaResource);
namespace.setSchemaPrefix(schemaPrefix);
return namespace;
}
/**
* Adds only Element class beans which need extra meta info for schema.
*
* @param elementClassList The list to fill.
* @throws X4OLanguageModuleLoaderException
*/
private void createElementClasses(List<ElementClass> elementClassList,X4OLanguage language) throws X4OLanguageModuleLoaderException {
ElementClass ec = null;
ElementClassAttribute attr = null;
ec = new DefaultElementClass("bindingHandler",null,BeanElement.class);
ec.addElementParent(CEL_ROOT_URI, "module");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
attr = newElementClassAttribute(language);
attr.setName("id");
attr.setRequired(true);
ec.addElementClassAttribute(attr);
attr = newElementClassAttribute(language);
attr.setName("bean.class");
attr.setRequired(true);
ec.addElementClassAttribute(attr);
elementClassList.add(ec);
ec = new DefaultElementClass("attributeHandler",null,BeanElement.class);
ec.addElementParent(CEL_ROOT_URI, "module");
attr = newElementClassAttribute(language);
attr.setName("bean.class");
attr.setRequired(true);
ec.addElementClassAttribute(attr);
elementClassList.add(ec);
ec = new DefaultElementClass("configurator",null,BeanElement.class);
ec.addElementParent(CEL_CORE_URI, "elementInterface");
ec.addElementParent(CEL_CORE_URI, "element");
attr = newElementClassAttribute(language);
attr.setName("bean.class");
attr.setRequired(true);
ec.addElementClassAttribute(attr);
attr = newElementClassAttribute(language);
attr.setName("configAction");
ec.addElementClassAttribute(attr);
elementClassList.add(ec);
ec = new DefaultElementClass("configuratorGlobal",null,BeanElement.class);
ec.addElementParent(CEL_ROOT_URI, "module");
attr = newElementClassAttribute(language);
attr.setName("bean.class");
attr.setRequired(true);
ec.addElementClassAttribute(attr);
attr = newElementClassAttribute(language);
attr.setName("configAction");
ec.addElementClassAttribute(attr);
elementClassList.add(ec);
ec = new DefaultElementClass("description",null,DescriptionElement.class);
ec.setSchemaContentBase("string");
ec.addElementParent(CEL_ROOT_URI, "module");
ec.addElementParent(CEL_CORE_URI, "namespace");
ec.addElementParent(CEL_CORE_URI, "attributeHandler");
ec.addElementParent(CEL_CORE_URI, "bindingHandler");
ec.addElementParent(CEL_CORE_URI, "configurator");
ec.addElementParent(CEL_CORE_URI, "configuratorGlobal");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
ec.addElementParent(CEL_CORE_URI, "element");
ec.addElementParent(CEL_CORE_URI, "attribute");
elementClassList.add(ec);
ec = new DefaultElementClass("elementParent",null,ElementClassAddParentElement.class);
ec.addElementParent(CEL_CORE_URI, "element");
ec.addElementParent(CEL_CORE_URI, "elementInterface");
attr = newElementClassAttribute(language);
attr.setName("tag");
attr.setRequired(true);
ec.addElementClassAttribute(attr);
attr = newElementClassAttribute(language);
attr.setName("uri");
ec.addElementClassAttribute(attr);
elementClassList.add(ec);
private ElementClass createElementClass(X4OLanguage language,String tag,Class<?> objectClass,Class<?> elementClass,String description) throws X4OLanguageModuleLoaderException {
try {
ElementClass result = (ElementClass)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementClass());
result.setTag(tag);
result.setObjectClass(objectClass);
result.setElementClass(elementClass);
result.setDescription(description);
return result;
} catch (InstantiationException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
} catch (IllegalAccessException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
}
}
/**
@ -289,9 +248,18 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
* @return The new ElementClassAttribute instance.
* @throws X4OLanguageModuleLoaderException When class could not be created.
*/
private ElementClassAttribute newElementClassAttribute(X4OLanguage language) throws X4OLanguageModuleLoaderException {
private ElementClassAttribute createElementClassAttribute(X4OLanguage language,String name,boolean required,ObjectConverter converter) throws X4OLanguageModuleLoaderException {
try {
return (ElementClassAttribute)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementClassAttribute());
ElementClassAttribute result = (ElementClassAttribute)X4OLanguageClassLoader.newInstance(language.getLanguageConfiguration().getDefaultElementClassAttribute());
result.setId(name); // ??
result.setName(name);
if (required) {
result.setRequired(required);
}
if (converter!=null) {
result.setObjectConverter(converter);
}
return result;
} catch (InstantiationException e) {
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
} catch (IllegalAccessException e) {
@ -303,10 +271,11 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
* Adds binding handler to module.
* @param id The id to set on the handler.
* @param handler The handler to add the the module.
* @param elementLanguageModule The module to add the handler to.
* @param languageModule The module to add the handler to.
*/
private void addBindingHandler(String id,ElementBindingHandler handler,X4OLanguageModule elementLanguageModule) {
private void addBindingHandler(X4OLanguageModule languageModule,ElementBindingHandler handler,String id,String description) {
handler.setId(id);
elementLanguageModule.addElementBindingHandler(handler);
handler.setDescription(description);
languageModule.addElementBindingHandler(handler);
}
}

View file

@ -41,7 +41,8 @@ import org.x4o.xml.io.X4OSchemaWriter;
*/
public class X4OWriteLanguageSchemaExecutor {
private String language = null;
private String languageName = null;
private String languageVersion = null;
private String languageNamespaceUri = null;
private File basePath;
@ -73,10 +74,19 @@ public class X4OWriteLanguageSchemaExecutor {
System.exit(1);
return;
}
languageSchema.setLanguage(arguIterator.next());
languageSchema.setLanguageName(arguIterator.next());
continue;
}
if ("-verbose".equals(arg) || "-v".equals(arg)) {
if ("-version".equals(arg) || "-v".equals(arg)) {
if (arguIterator.hasNext()==false) {
System.err.println("No argument for "+arg+" given.");
System.exit(1);
return;
}
languageSchema.setLanguageVersion(arguIterator.next());
continue;
}
if ("-verbose".equals(arg) || "-V".equals(arg)) {
printStack = true;
}
}
@ -100,23 +110,37 @@ public class X4OWriteLanguageSchemaExecutor {
public void execute() throws ElementException {
// Start xsd generator
X4ODriver<?> driver = X4ODriverManager.getX4ODriver(getLanguage());
X4OSchemaWriter xsd = driver.createSchemaWriter(driver.getLanguageVersionDefault());
X4ODriver<?> driver = X4ODriverManager.getX4ODriver(getLanguageName());
X4OSchemaWriter xsd = driver.createSchemaWriter(getLanguageVersion());
xsd.writeSchema(getBasePath(), getLanguageNamespaceUri());
}
/**
* @return the language
* @return the languageName
*/
public String getLanguage() {
return language;
public String getLanguageName() {
return languageName;
}
/**
* @param language the language to set
* @param languageName the languageName to set
*/
public void setLanguage(String language) {
this.language = language;
public void setLanguageName(String languageName) {
this.languageName = languageName;
}
/**
* @return the languageVersion
*/
public String getLanguageVersion() {
return languageVersion;
}
/**
* @param languageVersion the languageVersion to set
*/
public void setLanguageVersion(String languageVersion) {
this.languageVersion = languageVersion;
}
/**

View file

@ -25,37 +25,11 @@ package org.x4o.xml.element;
/**
* The default ElementClass to store the Element information.
* DefaultElementClass stores the XML Element information.
*
* @author Willem Cazander
* @version 1.0 Feb 19, 2007
*/
public class DefaultElementClass extends AbstractElementClass {
/**
* Creates an default DefaultElementClass.
*/
public DefaultElementClass() {
}
/**
* Creates config-ed ElementClass.
* @param tag The tag of this ElementClass.
* @param objectClass The objectClass of the ElementClass.
*/
public DefaultElementClass(String tag,Class<?> objectClass) {
this(tag,objectClass,null);
}
/**
* Creates config-ed ElementClass.
* @param tag The tag of this ElementClass.
* @param objectClass The objectClass of the ElementClass.
* @param elementClass The elementClass of this ElementClass.
*/
public DefaultElementClass(String tag,Class<?> objectClass,Class<?> elementClass) {
setTag(tag);
setObjectClass(objectClass);
setElementClass(elementClass);
}
}

View file

@ -24,6 +24,7 @@
package org.x4o.xml.io;
import org.x4o.xml.X4ODriver;
import org.x4o.xml.X4ODriverManager;
/**
* DefaultX4ODriver can be used to create language without code and type safty.
@ -41,9 +42,9 @@ public class DefaultX4ODriver<T> extends X4ODriver<T> {
}
public DefaultX4ODriver(String languageName,String languageVersion) {
super();
this.languageName=languageName;
this.languageVersion=languageVersion;
X4ODriverManager.registerX4ODriver(this);
}
@Override

View file

@ -259,7 +259,8 @@ public class XMLWriter extends DefaultHandler2 {
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
if (startElement!=null) {
write(startElement.toString());
String tag = startElement.toString();
write(tag.substring(0,tag.length()-1));
write(XMLConstants.TAG_CLOSE_EMPTY);
startElement=null;
indent--;

View file

@ -55,21 +55,21 @@ public class X4OWriteLanguageSchemaExecutorTest extends TestCase {
public void testEldSchema() throws Exception {
X4OWriteLanguageSchemaExecutor writer = new X4OWriteLanguageSchemaExecutor();
writer.setBasePath(getTempPath("junit-xsd-eld"));
writer.setLanguage(EldDriver.LANGUAGE_NAME);
writer.setLanguageName(EldDriver.LANGUAGE_NAME);
writer.execute();
}
public void testEldCoreSchema() throws Exception {
X4OWriteLanguageSchemaExecutor writer = new X4OWriteLanguageSchemaExecutor();
writer.setBasePath(getTempPath("junit-xsd-cel"));
writer.setLanguage(CelDriver.LANGUAGE_NAME);
writer.setLanguageName(CelDriver.LANGUAGE_NAME);
writer.execute();
}
public void testSwiXmlSchema() throws Exception {
X4OWriteLanguageSchemaExecutor writer = new X4OWriteLanguageSchemaExecutor();
writer.setBasePath(getTempPath("junit-xsd-swixml2"));
writer.setLanguage(SwiXmlDriver.LANGUAGE_NAME);
writer.setLanguageName(SwiXmlDriver.LANGUAGE_NAME);
writer.execute();
}

View file

@ -23,18 +23,25 @@
package org.x4o.xml.test;
import org.x4o.xml.X4ODriver;
import org.x4o.xml.X4ODriverManager;
import org.x4o.xml.io.DefaultX4ODriver;
import org.x4o.xml.io.X4OReaderContext;
import org.x4o.xml.io.X4OWriterContext;
import org.x4o.xml.test.models.TestObjectRoot;
public class TestDriver extends DefaultX4ODriver<TestObjectRoot> {
public class TestDriver extends X4ODriver<TestObjectRoot> {
static final public String LANGUAGE_NAME = "test";
static final public String[] LANGUAGE_VERSIONS = new String[]{X4ODriver.DEFAULT_LANGUAGE_VERSION};
public TestDriver() {
super(LANGUAGE_NAME);
@Override
public String getLanguageName() {
return LANGUAGE_NAME;
}
@Override
public String[] getLanguageVersions() {
return LANGUAGE_VERSIONS;
}
static public TestDriver getInstance() {