[jboss-cvs] JBossAS SVN: r70509 - projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Mar 6 14:50:59 EST 2008
Author: adrian at jboss.org
Date: 2008-03-06 14:50:59 -0500 (Thu, 06 Mar 2008)
New Revision: 70509
Added:
projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBTestDelegate.java
projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/SchemaPrinter.java
projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/TestSchemaResolver.java
Modified:
projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBDeployer.java
Log:
Use local jbossxb test support until jbossxb provides it
Modified: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBDeployer.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBDeployer.java 2008-03-06 19:28:52 UTC (rev 70508)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBDeployer.java 2008-03-06 19:50:59 UTC (rev 70509)
@@ -32,8 +32,6 @@
import org.jboss.kernel.plugins.deployment.xml.BasicXMLDeployer;
import org.jboss.kernel.spi.deployment.KernelDeployment;
import org.jboss.logging.Logger;
-import org.jboss.test.xb.builder.JBossXBTestDelegate;
-import org.jboss.test.xb.builder.TestSchemaResolver;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
import org.jboss.xb.builder.JBossXBBuilder;
Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBTestDelegate.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBTestDelegate.java (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/JBossXBTestDelegate.java 2008-03-06 19:50:59 UTC (rev 70509)
@@ -0,0 +1,171 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.aop.junit;
+
+import java.lang.reflect.Method;
+import java.net.URL;
+
+import org.jboss.net.protocol.URLStreamHandlerFactory;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
+
+/**
+ * JBossXBTestDelegate.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 40492 $
+ */
+public class JBossXBTestDelegate extends AbstractTestDelegate
+{
+ /** Whether initialization has been done */
+ private static boolean done = false;
+
+ /** The unmarshaller factory */
+ protected UnmarshallerFactory unmarshallerFactory;
+
+ /** The resolver */
+ protected SchemaBindingResolver defaultResolver;
+
+ /**
+ * Initialize
+ */
+ public synchronized static void init()
+ {
+ if (done)
+ return;
+ done = true;
+ URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory());
+ URLStreamHandlerFactory.preload();
+ String handlerPkgs = System.getProperty("java.protocol.handler.pkgs");
+ if (handlerPkgs != null)
+ handlerPkgs += "|org.jboss.net.protocol";
+ else
+ handlerPkgs = "org.jboss.net.protocol";
+ System.setProperty("java.protocol.handler.pkgs", handlerPkgs);
+ }
+
+ /**
+ * Create a new JBossXBTestDelegate.
+ *
+ * @param clazz the test class
+ */
+ public JBossXBTestDelegate(Class<?> clazz)
+ {
+ super(clazz);
+ }
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ init();
+ unmarshallerFactory = UnmarshallerFactory.newInstance();
+ initResolver();
+ }
+
+ protected void initResolver() throws Exception
+ {
+ try
+ {
+ Method method = clazz.getMethod("initResolver", null);
+ defaultResolver = (SchemaBindingResolver) method.invoke(null, null);
+ }
+ catch (NoSuchMethodException ignored)
+ {
+ defaultResolver = new DefaultSchemaResolver();
+ }
+ }
+
+ /**
+ * Unmarshal an object
+ *
+ * @param url the url
+ * @param resolver the resolver
+ * @return the object
+ * @throws Exception for any error
+ */
+ public Object unmarshal(String url, SchemaBindingResolver resolver) throws Exception
+ {
+ if (resolver == null)
+ resolver = defaultResolver;
+
+ long start = System.currentTimeMillis();
+ Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+ log.debug("Initialized parsing in " + (System.currentTimeMillis() - start) + "ms");
+ try
+ {
+ Object result = unmarshaller.unmarshal(url, resolver);
+ log.debug("Total parse for " + url + " took " + (System.currentTimeMillis() - start) + "ms");
+ return result;
+ }
+ catch (Exception e)
+ {
+ log.debug("Error during parsing: " + url, e);
+ throw e;
+ }
+ }
+
+ /**
+ * Unmarshal an object
+ *
+ * @param url the url
+ * @param schema the schema
+ * @return the object
+ * @throws Exception for any error
+ */
+ public Object unmarshal(String url, SchemaBinding schema) throws Exception
+ {
+ long start = System.currentTimeMillis();
+ Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+ log.debug("Initialized parsing in " + (System.currentTimeMillis() - start) + "ms");
+ try
+ {
+ Object result = unmarshaller.unmarshal(url, schema);
+ log.debug("Total parse for " + url + " took " + (System.currentTimeMillis() - start) + "ms");
+ return result;
+ }
+ catch (Exception e)
+ {
+ log.debug("Error during parsing: " + url, e);
+ throw e;
+ }
+ }
+
+ /**
+ * Bind a schema
+ *
+ * @param url the url
+ * @param resolver the resolver
+ * @return the object
+ * @throws Exception for any error
+ */
+ public SchemaBinding bind(String url, SchemaBindingResolver resolver) throws Exception
+ {
+ return XsdBinder.bind(url, resolver);
+ }
+}
Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/SchemaPrinter.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/SchemaPrinter.java (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/SchemaPrinter.java 2008-03-06 19:50:59 UTC (rev 70509)
@@ -0,0 +1,277 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.aop.junit;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.xml.XMLConstants;
+
+import org.jboss.xb.binding.sunday.unmarshalling.AllBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.AttributeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ChoiceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
+
+/**
+ * SchemaPrinter.
+ *
+ * TODO finish this off properly
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class SchemaPrinter
+{
+ @SuppressWarnings("unchecked")
+ public static String printSchema(SchemaBinding schemaBinding)
+ {
+ String nsURI = (String) schemaBinding.getNamespaces().iterator().next();
+ StringBuilder builder = new StringBuilder();
+ builder.append("<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n");
+ if (XMLConstants.NULL_NS_URI.equals(nsURI) == false)
+ {
+ builder.append(" targetNamespace=\"").append(nsURI).append("\"\n");
+ builder.append(" xmlns=\"").append(nsURI).append("\"\n");
+ }
+ builder.append(">\n");
+ int pad=3;
+ Iterator<ParticleBinding> elements = schemaBinding.getElementParticles();
+ while (elements != null && elements.hasNext())
+ printElement(builder, pad, elements.next());
+ Iterator<TypeBinding> types = schemaBinding.getTypes();
+ while (types != null && types.hasNext())
+ printType(builder, pad, types.next());
+ builder.append("</xsd:schema>");
+ return builder.toString();
+ }
+
+ public static void printElement(StringBuilder builder, int pad, ParticleBinding particle)
+ {
+ ElementBinding element = (ElementBinding) particle.getTerm();
+ pad(builder, pad);
+ builder.append("<element name=\"").append(element.getQName()).append("\"");
+ int minOccurs = particle.getMinOccurs();
+ if (minOccurs != 1)
+ builder.append(" minOccurs=\"").append(minOccurs).append("\"");
+ int maxOccurs = particle.getMaxOccurs();
+ if (maxOccurs != 1)
+ {
+ builder.append(" maxOccurs=\"");
+ if (maxOccurs == -1)
+ builder.append("unbounded");
+ else
+ builder.append(maxOccurs);
+ builder.append("\"");
+ }
+ TypeBinding type = element.getType();
+ if (type != null && type.getQName() != null)
+ builder.append(" type=\"").append(type.getQName()).append("\"");
+ builder.append(">");
+ if (type != null && type.getQName() == null)
+ printAnonymousType(builder, pad + 3, type);
+ pad(builder, pad);
+ builder.append("</element>");
+ }
+
+ public static void printAnonymousType(StringBuilder builder, int pad, TypeBinding type)
+ {
+ pad(builder, pad);
+ builder.append("<complexType>");
+ TypeBinding baseTypeBinding = type.getBaseType();
+ String qName;
+ if (baseTypeBinding != null)
+ qName = baseTypeBinding.getQName().toString();
+ else
+ qName = "xsd:anyType";
+ pad(builder, pad);
+ builder.append(" <restriction base=\"").append(qName).append("\">");
+ printTypeInfo(builder, pad+6, type);
+ pad(builder, pad);
+ builder.append(" </restriction>");
+ pad(builder, pad);
+ builder.append("</complexType>");
+ }
+
+ public static void printType(StringBuilder builder, int pad, TypeBinding type)
+ {
+ if (type.isSimple())
+ printSimpleType(builder, pad, type);
+ else
+ printComplexType(builder, pad, type);
+ }
+
+ public static void printSimpleType(StringBuilder builder, int pad, TypeBinding type)
+ {
+ pad(builder, pad);
+ builder.append("<simpleType name=\"").append(type.getQName()).append("\"");
+ TypeBinding baseTypeBinding = type.getBaseType();
+ String qName = null;
+ if (baseTypeBinding != null)
+ qName = baseTypeBinding.getQName().toString();
+ else
+ qName = "xsd:anySimpleType";
+ builder.append(" base=\"").append(qName).append("\">");
+ printTypeInfo(builder, pad+3, type);
+ pad(builder, pad);
+ builder.append("</simpleType>");
+ }
+
+ public static void printComplexType(StringBuilder builder, int pad, TypeBinding type)
+ {
+ pad(builder, pad);
+ builder.append("<complexType name=\"").append(type.getQName()).append("\"");
+ TypeBinding baseTypeBinding = type.getBaseType();
+ String qName = null;
+ if (baseTypeBinding != null)
+ qName = baseTypeBinding.getQName().toString();
+ else
+ qName = "xsd:anyType";
+ builder.append(" base=\"").append(qName).append("\">");
+ printTypeInfo(builder, pad+3, type);
+ pad(builder, pad);
+ builder.append("</complexType>");
+ }
+
+ @SuppressWarnings("unchecked")
+ public static void printTypeInfo(StringBuilder builder, int pad, TypeBinding type)
+ {
+ ParticleBinding particle = type.getParticle();
+ if (particle != null)
+ {
+ printParticle(builder, pad, particle);
+ }
+
+ Collection<AttributeBinding> attributes = type.getAttributes();
+ if (attributes != null)
+ {
+ for (AttributeBinding attribute : attributes)
+ {
+ printAttribute(builder, pad, attribute);
+ }
+ }
+ }
+
+ public static void printParticle(StringBuilder builder, int pad, ParticleBinding particle)
+ {
+ TermBinding term = particle.getTerm();
+ if (term instanceof ElementBinding)
+ printElement(builder, pad, particle);
+ else if (term instanceof WildcardBinding)
+ printWildcard(builder, pad, particle);
+ else if (term instanceof SequenceBinding)
+ printModel(builder, pad, particle, "sequence");
+ else if (term instanceof AllBinding)
+ printModel(builder, pad, particle, "all");
+ else if (term instanceof ChoiceBinding)
+ printModel(builder, pad, particle, "choice");
+ }
+
+ @SuppressWarnings("unchecked")
+ public static void printModel(StringBuilder builder, int pad, ParticleBinding particle, String prefix)
+ {
+ pad(builder, pad);
+ builder.append("<").append(prefix);
+ int minOccurs = particle.getMinOccurs();
+ if (minOccurs != 1)
+ builder.append(" minOccurs=\"").append(minOccurs).append("\"");
+ int maxOccurs = particle.getMaxOccurs();
+ if (maxOccurs != 1)
+ {
+ builder.append(" maxOccurs=\"");
+ if (maxOccurs == -1)
+ builder.append("unbounded");
+ else
+ builder.append(maxOccurs);
+ builder.append("\"");
+ }
+ builder.append(">");
+ ModelGroupBinding model = (ModelGroupBinding) particle.getTerm();
+ Collection<ParticleBinding> particles = model.getParticles();
+ boolean newLine = true;
+ if (particles != null)
+ {
+ for (ParticleBinding component : particles)
+ printParticle(builder, pad+3, component);
+ }
+ else
+ {
+ newLine = false;
+ }
+ pad(builder, pad, newLine);
+ builder.append("</").append(prefix).append(">");
+ }
+
+ public static void printWildcard(StringBuilder builder, int pad, ParticleBinding particle)
+ {
+ pad(builder, pad);
+ builder.append("<any");
+ int minOccurs = particle.getMinOccurs();
+ if (minOccurs != 1)
+ builder.append(" minOccurs=\"").append(minOccurs).append("\"");
+ int maxOccurs = particle.getMaxOccurs();
+ if (maxOccurs != 1)
+ {
+ builder.append(" maxOccurs=\"");
+ if (maxOccurs == -1)
+ builder.append("unbounded");
+ else
+ builder.append(maxOccurs);
+ builder.append("\"");
+ }
+ builder.append("/>");
+ }
+
+ public static void printAttribute(StringBuilder builder, int pad, AttributeBinding attribute)
+ {
+ pad(builder, pad);
+ TypeBinding typeBinding = attribute.getType();
+ String qName = null;
+ if (typeBinding != null && typeBinding.getQName() != null)
+ qName = typeBinding.getQName().toString();
+ else
+ qName = "CDATA";
+ builder.append("<attribute name=\"").append(attribute.getQName().getLocalPart()).append("\"");
+ builder.append(" type=\"").append(qName).append("\"");
+ if (attribute.getRequired() == false)
+ builder.append(" optional=\"true\"/>");
+ }
+
+ public static void pad(StringBuilder builder, int pad)
+ {
+ pad(builder, pad, true);
+ }
+
+ public static void pad(StringBuilder builder, int pad, boolean newLine)
+ {
+ if (newLine)
+ builder.append("\n");
+ for (int i = 0; i < pad; ++ i)
+ builder.append(' ');
+ }
+}
Added: projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/TestSchemaResolver.java
===================================================================
--- projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/TestSchemaResolver.java (rev 0)
+++ projects/microcontainer/trunk/aop-mc-int/src/tests/org/jboss/test/aop/junit/TestSchemaResolver.java 2008-03-06 19:50:59 UTC (rev 70509)
@@ -0,0 +1,78 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.aop.junit;
+
+import java.util.HashMap;
+
+import org.jboss.logging.Logger;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.w3c.dom.ls.LSInput;
+
+/**
+ * TestSchemaResolver.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class TestSchemaResolver implements SchemaBindingResolver
+{
+ private static final Logger log = Logger.getLogger(TestSchemaResolver.class);
+
+ private HashMap<String, SchemaBinding> bindings = new HashMap<String, SchemaBinding>();
+
+ public String getBaseURI()
+ {
+ return null;
+ }
+
+ public void addSchemaBinding(SchemaBinding schemaBinding)
+ {
+ schemaBinding.setSchemaResolver(this);
+ String nsURI = (String) schemaBinding.getNamespaces().iterator().next();
+ bindings.put(nsURI, schemaBinding);
+ if (log.isTraceEnabled())
+ {
+ String schema = SchemaPrinter.printSchema(schemaBinding);
+ log.trace("Bound: " + nsURI + "\n" + schema);
+ }
+ }
+
+ public SchemaBinding resolve(String nsUri, String baseURI, String schemaLocation)
+ {
+ SchemaBinding result = bindings.get(nsUri);
+ if (result == null)
+ throw new RuntimeException("Schema not bound: " + nsUri + " available: " + bindings.keySet());
+ return result;
+ }
+
+ public LSInput resolveAsLSInput(String nsUri, String baseUri, String schemaLocation)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setBaseURI(String baseURI)
+ {
+ throw new org.jboss.util.NotImplementedException("setBaseURI");
+ }
+}
More information about the jboss-cvs-commits
mailing list