You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2008/10/30 01:14:16 UTC

svn commit: r709052 - in /tuscany/branches/sca-java-1.3.3: itest/validation/src/main/resources/impl/osgi/MissingComponentTypeFile/ itest/validation/src/main/resources/impl/osgi/PropertyShouldSpecifySR/ modules/assembly-xml/src/test/java/org/apache/tusc...

Author: lresende
Date: Wed Oct 29 17:14:15 2008
New Revision: 709052

URL: http://svn.apache.org/viewvc?rev=709052&view=rev
Log:
TUSCANY-2629 and TUSCANY-2624 - Enhancments to processor that handles unknown elements

Added:
    tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLDocumentStreamReader.java
    tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLEventsStreamReader.java
    tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLFragmentStreamReader.java
    tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java
    tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyXMLStreamReader.java
    tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java.orig
Modified:
    tuscany/branches/sca-java-1.3.3/itest/validation/src/main/resources/impl/osgi/MissingComponentTypeFile/OSGiTestService.jar
    tuscany/branches/sca-java-1.3.3/itest/validation/src/main/resources/impl/osgi/PropertyShouldSpecifySR/OSGiTestService.jar
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAttributeTestCase.java
    tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/Calculator.composite
    tuscany/branches/sca-java-1.3.3/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java
    tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java
    tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java
    tuscany/branches/sca-java-1.3.3/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java

Modified: tuscany/branches/sca-java-1.3.3/itest/validation/src/main/resources/impl/osgi/MissingComponentTypeFile/OSGiTestService.jar
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/itest/validation/src/main/resources/impl/osgi/MissingComponentTypeFile/OSGiTestService.jar?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
Binary files - no diff available.

Modified: tuscany/branches/sca-java-1.3.3/itest/validation/src/main/resources/impl/osgi/PropertyShouldSpecifySR/OSGiTestService.jar
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/itest/validation/src/main/resources/impl/osgi/PropertyShouldSpecifySR/OSGiTestService.jar?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
Binary files - no diff available.

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java Wed Oct 29 17:14:15 2008
@@ -28,44 +28,50 @@
 import junit.framework.TestCase;
 
 import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.ValidatingXMLInputFactory;
 import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.junit.Test;
 
 public class AnyElementReadWriteTestCase extends TestCase {
-	
+
 	private XMLInputFactory inputFactory;
-	String XML = "<?xml version='1.0' encoding='UTF-8'?><composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" targetNamespace=\"http://calc\" name=\"Calculator\"><service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\"><interface.java xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" interface=\"calculator.CalculatorService\" /></service><component name=\"CalculatorServiceComponent\"><reference name=\"addService\" target=\"AddServiceComponent\" /><reference name=\"subtractService\" target=\"SubtractServiceComponent\" /><reference name=\"multiplyService\" target=\"MultiplyServiceComponent\" /><reference name=\"divideService\" target=\"DivideServiceComponent\" /></component><component name=\"AddServiceComponent\" /><component name=\"SubtractServiceComponent\" /><component name=\"MultiplyServiceComponent\" /><component name=\"DivideServiceComponent\" /><x:unknownElement xmlns:x=\"http://x\" uknAttr=\"attribute1\"><x:subU
 nknownElement1 uknAttr1=\"attribute1\" /><x:subUnknownElement2 /></x:unknownElement></composite>";
+	String XML = "<?xml version='1.0' encoding='UTF-8'?><composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" targetNamespace=\"http://calc\" name=\"Calculator\"><service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\"><interface.java interface=\"calculator.CalculatorService\" /></service><component name=\"CalculatorServiceComponent\"><reference name=\"addService\" target=\"AddServiceComponent\" /><reference name=\"subtractService\" target=\"SubtractServiceComponent\" /><reference name=\"multiplyService\" target=\"MultiplyServiceComponent\" /><reference name=\"divideService\" target=\"DivideServiceComponent\" /></component><component name=\"AddServiceComponent\" /><component name=\"SubtractServiceComponent\" /><component name=\"MultiplyServiceComponent\" /><component name=\"DivideServiceComponent\" /><x:unknownElement xmlns:x=\"http://x\" uknAttr=\"attribute1\"><y:subUnknownElement1 xmlns:y=\"http://y\" uknAttr1
 =\"attribute2\" /><x:subUnknownElement2 /></x:unknownElement></composite>";
 	private ExtensibleStAXArtifactProcessor staxProcessor;
-	
-	 @Override
-	    public void setUp() throws Exception {
-	        ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
-	        inputFactory = XMLInputFactory.newInstance();
-	        StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
-	        staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, XMLInputFactory.newInstance(), XMLOutputFactory.newInstance(), null);
-	    }
-	 
-	 @Override
-	    public void tearDown() throws Exception {
-	    }
+
+	@Override
+	public void setUp() throws Exception {
+		ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+		 ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
+		 inputFactory = modelFactories.getFactory(ValidatingXMLInputFactory.class);
 		
+		StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints
+				.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+		staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors,
+				inputFactory, XMLOutputFactory.newInstance(), null);
+	}
+
+	@Override
+	public void tearDown() throws Exception {
+	}
+
 	@Test
-	public void testReadWriteComposite() throws Exception{
+	public void testReadWriteComposite() throws Exception {
 		InputStream is = getClass().getResourceAsStream("Calculator.composite");
 		XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
-		Composite composite = (Composite)staxProcessor.read(reader);
+		Composite composite = (Composite) staxProcessor.read(reader);
 		assertNotNull(composite);
-		
+
 		ByteArrayOutputStream bos = new ByteArrayOutputStream();
 		staxProcessor.write(composite, bos);
-		System.out.println(bos.toString());
-		assertEquals(XML,bos.toString());
+		//System.out.println(bos.toString());
+		assertEquals(XML, bos.toString());
 		bos.close();
-        
-        is.close();
-       }
+
+		is.close();
+	}
 
 }

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadDocumentTestCase.java Wed Oct 29 17:14:15 2008
@@ -184,7 +184,7 @@
         
         documentProcessor.resolve(composite, resolver);
         
-        assertEquals(composite.getConstrainingType(), constrainingType);
+       assertEquals(composite.getConstrainingType(), constrainingType);
         assertEquals(composite.getComponents().get(0).getConstrainingType(), constrainingType);
     }
 

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAttributeTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAttributeTestCase.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAttributeTestCase.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/ReadWriteAttributeTestCase.java Wed Oct 29 17:14:15 2008
@@ -52,7 +52,7 @@
     private static final String XML = "<?xml version='1.0' encoding='UTF-8'?>"+
 		 	 "<composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" targetNamespace=\"http://calc\" name=\"Calculator\">"+
 		 	 "<service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\">"+
-		 	 	"<interface.java xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" interface=\"calculator.CalculatorService\" />"+
+		 	 	"<interface.java interface=\"calculator.CalculatorService\" />"+
 	 	 	 "</service>"+
 	 	 	 "<component name=\"CalculatorServiceComponent\" customAttribute=\"customValue\">"+
 	 	 	 	"<reference name=\"addService\" target=\"AddServiceComponent\" />"+
@@ -75,7 +75,6 @@
         StAXAttributeProcessorExtensionPoint staxAttributeProcessors = extensionPoints.getExtensionPoint(StAXAttributeProcessorExtensionPoint.class);
         staxAttributeProcessors.addArtifactProcessor(new TestAttributeProcessor());
         
-        
         staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, XMLInputFactory.newInstance(), XMLOutputFactory.newInstance(), null);
     }
 

Modified: tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/Calculator.composite
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/Calculator.composite?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/Calculator.composite (original)
+++ tuscany/branches/sca-java-1.3.3/modules/assembly-xml/src/test/resources/org/apache/tuscany/sca/assembly/xml/Calculator.composite Wed Oct 29 17:14:15 2008
@@ -22,10 +22,11 @@
 	xmlns:calc="http://calc"
 	targetNamespace="http://calc"
 	name="Calculator">
-
-    <service name="CalculatorService" promote="CalculatorServiceComponent">
+	
+	<service name="CalculatorService" promote="CalculatorServiceComponent">
         <interface.java interface="calculator.CalculatorService"/>
     </service>
+    
     <component name="CalculatorServiceComponent">
 		<implementation.java class="calculator.CalculatorServiceImpl"/>
         <reference name="addService" target="AddServiceComponent"/>
@@ -51,9 +52,8 @@
     </component>
     
     <x:unknownElement uknAttr="attribute1">
-		<x:subUnknownElement1 uknAttr1="attribute1"/>
-		<x:subUnknownElement2/>
+		<y:subUnknownElement1 xmlns:y="http://y" uknAttr1="attribute2"/>
+		<x:subUnknownElement2 />
 	</x:unknownElement>
-
-
+		
 </composite>

Modified: tuscany/branches/sca-java-1.3.3/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java Wed Oct 29 17:14:15 2008
@@ -60,7 +60,7 @@
         assertNotNull(componentType);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         staxProcessor.write(componentType, outputFactory.createXMLStreamWriter(bos));
-        assertEquals("<?xml version='1.0' encoding='UTF-8'?><componentType xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\"><service name=\"CalculatorService\"><binding.sca /><interface.java xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" class=\"calculator.CalculatorService\" /></service><reference name=\"addService\"><binding.sca /><interface.java xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" class=\"calculator.AddService\" /></reference></componentType>",
+        assertEquals("<?xml version='1.0' encoding='UTF-8'?><componentType xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\"><service name=\"CalculatorService\"><binding.sca /><interface.java class=\"calculator.CalculatorService\" /></service><reference name=\"addService\"><binding.sca /><interface.java class=\"calculator.AddService\" /></reference></componentType>",
         		     bos.toString());
         }
 
@@ -70,7 +70,7 @@
         assertNotNull(composite);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         staxProcessor.write(composite, outputFactory.createXMLStreamWriter(bos));
-        assertEquals("<?xml version='1.0' encoding='UTF-8'?><composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" targetNamespace=\"http://calc\" name=\"Calculator\"><service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\"><binding.sca /><interface.java xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" interface=\"calculator.CalculatorService\" /></service><component name=\"CalculatorServiceComponent\"><reference name=\"addService\" target=\"AddServiceComponent\"><binding.sca /></reference><reference name=\"subtractService\" target=\"SubtractServiceComponent\" /><reference name=\"multiplyService\" target=\"MultiplyServiceComponent\" /><reference name=\"divideService\" target=\"DivideServiceComponent\" /></component><component name=\"AddServiceComponent\"><service><binding.sca /><interface.java xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" interface=\"calculator.AddService\" /></service></component><component name=\"S
 ubtractServiceComponent\" /><component name=\"MultiplyServiceComponent\" /><component name=\"DivideServiceComponent\" /></composite>",
+        assertEquals("<?xml version='1.0' encoding='UTF-8'?><composite xmlns=\"http://www.osoa.org/xmlns/sca/1.0\" xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\" targetNamespace=\"http://calc\" name=\"Calculator\"><service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\"><binding.sca /><interface.java interface=\"calculator.CalculatorService\" /></service><component name=\"CalculatorServiceComponent\"><reference name=\"addService\" target=\"AddServiceComponent\"><binding.sca /></reference><reference name=\"subtractService\" target=\"SubtractServiceComponent\" /><reference name=\"multiplyService\" target=\"MultiplyServiceComponent\" /><reference name=\"divideService\" target=\"DivideServiceComponent\" /></component><component name=\"AddServiceComponent\"><service><binding.sca /><interface.java interface=\"calculator.AddService\" /></service></component><component name=\"SubtractServiceComponent\" /><component name=\"MultiplyServiceComponent\" /><component na
 me=\"DivideServiceComponent\" /></composite>",
                  	 bos.toString() );
     }
 

Modified: tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java Wed Oct 29 17:14:15 2008
@@ -22,17 +22,22 @@
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
 
 import java.util.ArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
 
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.events.XMLEvent;
 
-import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl;
 import org.apache.tuscany.sca.contribution.Constants;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
@@ -40,272 +45,118 @@
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
 import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.Problem;
-import org.apache.tuscany.sca.monitor.Problem.Severity;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.traversal.DocumentTraversal;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
-import org.w3c.dom.traversal.TreeWalker;
+import org.apache.tuscany.sca.contribution.processor.xml.XMLEventsStreamReader;
 
 public class AnyElementProcessor implements StAXArtifactProcessor<Object> {
-	private static final QName ANY_ELEMENT = new QName(Constants.XMLSCHEMA_NS, "anyElement");
-	
-	private static final Logger logger = Logger.getLogger(AnyElementProcessor.class.getName());
-	private DocumentBuilderFactory documentBuilderFactory;
-	private Document document;
+	private static final QName ANY_ELEMENT = new QName(Constants.XMLSCHEMA_NS,
+			"anyElement");
+
+	private XMLInputFactory xmlInputFactory;
+	@SuppressWarnings("unused")
 	private Monitor monitor;
-	
-	public AnyElementProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) {
-		documentBuilderFactory = modelFactories.getFactory(DocumentBuilderFactory.class);
+	//Map<String, NamespaceContext> map = new HashMap<String, NamespaceContext>();
+
+	public AnyElementProcessor(ModelFactoryExtensionPoint modelFactories,
+			Monitor monitor) {
+		xmlInputFactory = modelFactories.getFactory(XMLInputFactory.class);
 		this.monitor = monitor;
 	}
-	
 
-    public QName getArtifactType() {
-        return ANY_ELEMENT;
-    }
-
-    public Class<Object> getModelType() {
-        return Object.class;
-    }
-    
+	public QName getArtifactType() {
+		return ANY_ELEMENT;
+	}
+
+	public Class<Object> getModelType() {
+		return Object.class;
+	}
+
 	/**
-	 * Reads the contetns of the unknown elements and generates the DOM	
+	 * Reads the contetns of the unknown elements and generates a custom
+	 * implementation of XMLStreamReader i.e. XMLEventsStreamReader
+	 * 
 	 * @param reader
-	 * @param name
 	 * @return
 	 * @throws XMLStreamException
 	 */
-    public Object read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
-		
-		int event = reader.getEventType();
-		int level = 0;
-		ArrayList<String> elementList = new ArrayList<String>();
-		document = createDocument();
-		
-		QName name = reader.getName();
-		
-		while(reader.hasNext()){
-	    	switch(event){
-		    	case START_ELEMENT:
-		    		elementList.add(reader.getName().getLocalPart());
-		    		if(level == 0){
-		    			generateDOM(reader,null);
-		    			level++;
-		    		}
-		    		else{
-		    			generateDOM(reader,elementList.get(elementList.size()-2).toString());
-		    		}
-		    		
-		    		break;
-		    	case END_ELEMENT:
-		    		elementList.remove(reader.getName().getLocalPart());
-	    	}
-	    	if(reader.hasNext()){
-	    		event = reader.next();
-	    	}
-	      	
-	      	if(event == START_ELEMENT || event == END_ELEMENT){
-	      		if(reader.getName().equals(name)){
-	      			break;
-	      		}
-	      	}
-	    }
-		return document;
-	}
+	@SuppressWarnings("unchecked")
+	public Object read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
 
-	/**
-	 * Writes unknown portions back to the writer
-	 * @param model
-	 * @param writer
-	 */
-	public void write(Object model, XMLStreamWriter writer) {
+		//Custom variables
+		String currentElement = null;
+		List eventsList = new ArrayList();
 		
-		if( ! (model instanceof Document)) {
-			return;
-		}
+		Map<String, NamespaceContext> eventContext = new HashMap<String, NamespaceContext>();
 		
-		Document doc = (Document)model;
 		try{
-			DocumentTraversal traversal = (DocumentTraversal)doc;
-			TreeWalker walker = traversal.createTreeWalker(doc.getDocumentElement(),NodeFilter.SHOW_ALL, null, true);
-			writeDOM(walker,writer);
-		}
-		catch(Exception e){
-			if (logger.isLoggable(Level.SEVERE)) {
-                logger.log(Level.SEVERE, "Document not created ");
-            }
-			error("Document not created",document,e);
-		}
-	}
-
-    public void resolve(Object arg0, ModelResolver arg1) throws ContributionResolveException {
-    	
-    }
-    
-	/**
-	 * Method to generate the DOM
-	 * @param reader
-	 * @param parent
-	 * @throws Exception 
-	 */
-	//private void generateDOM(String elementText, String parent) {
-	private void generateDOM(XMLStreamReader reader, String parent) {
-		try{
-			String elePrefix = reader.getPrefix();
-			String eleQName = reader.getLocalName();
-			if (elePrefix != null && elePrefix.length() != 0) {
-                eleQName = elePrefix + ":" + eleQName;
-            }
+			//Cast the block of unknown elements into document
+			XMLDocumentStreamReader docReader = new XMLDocumentStreamReader(reader);
+					
+			XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(docReader);
 			
-			Element element = document.createElementNS(reader.getNamespaceURI(), eleQName);
+			while (xmlEventReader.hasNext()) {
+				XMLEvent event = xmlEventReader.nextEvent();
 				
-			int attributeCount = reader.getAttributeCount();
-			for(int i = 0;i < attributeCount;i++){
-				String ns = reader.getAttributeNamespace(i);
-                String prefix = reader.getAttributePrefix(i);
-                String qname = reader.getAttributeLocalName(i);
-                String value = reader.getAttributeValue(i);
-                if (prefix != null && prefix.length() != 0) {
-                    qname = prefix + ":" + qname;
-                }
-                element.setAttributeNS(ns,qname,value);
-			}
-			if(parent == null){
-				if(document != null){
-					document.appendChild(element);
-				}
-				else{
-					if (logger.isLoggable(Level.SEVERE)) {
-	                    logger.log(Level.SEVERE, "Document not created ");
-	                }
-					error("Document not created",document,element);
+				//Populate the eventContext map with the current element's name and corresponding NamesapceContext
+				if (currentElement != null && !(eventContext.containsKey(currentElement))) {
+					eventContext.put(currentElement, reader.getNamespaceContext());
 				}
-			}
-			else{
-				Node parentNode = getParentNode(document,parent);
-				if(parentNode != null){
-					parentNode.appendChild(element);
+				
+				//Populate the list with the XMLEvents
+				eventsList.add(event);
+				if (event.isStartElement()) {
+					currentElement = reader.getName().getLocalPart();
 				}
-				else{
-					if (logger.isLoggable(Level.SEVERE)) {
-						logger.log(Level.SEVERE, "Parent node not found");
-					}
-					error("Parent node not found",document,parentNode.getNodeName());
+				if (event.isEndDocument()) {
+					return new XMLEventsStreamReader(eventsList, eventContext);
 				}
 			}
 		}
 		catch(Exception e){
 			e.printStackTrace();
-			if (logger.isLoggable(Level.SEVERE)) {
-                logger.log(Level.SEVERE, "Document not created ");
-            }
-			error("Document not created",document,e);
 		}
+		return null;
 	}
 
 	/**
-	 * Method to create an empty document
-	 * @return
-	 */
-	private Document createDocument() {
-		try {
-	        document = documentBuilderFactory.newDocumentBuilder().newDocument();
-	        return document;
-	    } catch (ParserConfigurationException e) {
-	    	e.printStackTrace();
-	    }
-	    return null;
-	}
-
-	/**
-	 * Method to traverse the DOM structure and write the elements 
-	 * @param walker
+	 * Writes unknown portions back to the writer
+	 * 
+	 * @param model
 	 * @param writer
-	 * @throws XMLStreamException
 	 */
-	private void writeDOM(TreeWalker walker,XMLStreamWriter writer) throws XMLStreamException {
-	  
-	    Node parent = walker.getCurrentNode();
-	    
-	    writer.writeStartElement(parent.getPrefix(), parent.getLocalName(), parent.getNamespaceURI());
-	    
-	    NamedNodeMap attributes = parent.getAttributes();
-	   
-	    for(int i = 0;i<attributes.getLength();i++){
-		   writer.writeAttribute(attributes.item(i).getPrefix(), attributes.item(i).getNamespaceURI(), attributes.item(i).getLocalName(), attributes.item(i).getNodeValue());
-	    }
-	    	   
-	    for (Node n = walker.firstChild();n != null;n = walker.nextSibling()) {
-	      writeDOM(walker,writer);
-	    }
-	    writer.writeEndElement();
-	    
-	    walker.setCurrentNode(parent);
-	}
-
-	/**
-	 * Method to get the Parent node out of the DOM structure
-	 * @param doc
-	 * @param parent
-	 * @return
-	 */
-	private Node getParentNode(Node doc,String parent) {
-		Node parentNode = null;
-		try{
-			DocumentTraversal traversal = (DocumentTraversal)doc;
-			
-			CharSequence prefixChar = ":";
-			NodeIterator iterator = traversal.createNodeIterator(document.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);
-			for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
-				String nodeName = n.getNodeName();
-				String[] str = null;
-				if(n.getNodeName().contains(prefixChar)){
-					str = nodeName.split(":");
-					nodeName = str[str.length-1];
-				}
-				if(parent.equalsIgnoreCase(nodeName)){
-			    	  parentNode = n;
-			    	}
-			    }
-			return parentNode;
+	public void write(Object model, XMLStreamWriter writer)
+			throws XMLStreamException {
+		if (!(model instanceof XMLStreamReader)) {
+			return;
 		}
-		catch(Exception e){
-			e.printStackTrace();
+		XMLStreamReader reader = (XMLStreamReader) model;
+		
+		int event = reader.getEventType();
+		while (reader.hasNext()) {
+			switch (event) {
+			case START_ELEMENT:
+											
+				writer.writeStartElement(reader.getPrefix(), reader
+						.getLocalName(), reader.getNamespaceURI());
+				for (int i = 1; i <= reader.getAttributeCount(); i++) {
+					writer.writeAttribute(reader.getAttributePrefix(i), reader.getAttributeNamespace(i), 
+							reader.getAttributeLocalName(i), reader.getAttributeValue(i));
+				}
+				break;
+
+			case END_ELEMENT:
+				writer.writeEndElement();
+				break;
+			}
+			if (reader.hasNext()) {
+				event = reader.next();
+			}
 		}
-		return parentNode;
 	}
-	
-	 /**
-     * Marshals exceptions into the monitor
-     * 
-     * @param problems
-     * @param message
-     * @param model
-     */
-    private void error(String message, Object model, Exception ex) {
-    	if (monitor != null) {
-	        Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-validation-messages", Severity.ERROR, model, message, ex);
-	        monitor.problem(problem);
-    	}
-    }
-    
-    /**
-     * Report a error.
-     * 
-     * @param problems
-     * @param message
-     * @param model
-     */
-    private void error(String message, Object model, Object... messageParameters) {
-    	if (monitor != null) {
-	        Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
-	        monitor.problem(problem);
-    	}
-    }
-	
+
+	public void resolve(Object model, ModelResolver resolver)
+			throws ContributionResolveException {
+		// TODO Auto-generated method stub
+
+	}
+
 }

Added: tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLDocumentStreamReader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLDocumentStreamReader.java?rev=709052&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLDocumentStreamReader.java (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLDocumentStreamReader.java Wed Oct 29 17:14:15 2008
@@ -0,0 +1,482 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.contribution.processor.xml;
+
+import java.util.NoSuchElementException;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * This class is derived from Apache Axis2 class
+ * org.apache.axis2.util.StreamWrapper</a>. It's used wrap a XMLStreamReader to
+ * create a XMLStreamReader representing a document and it will produce
+ * START_DOCUMENT, END_DOCUMENT events.
+ *
+ * @version $Rev: 659153 $ $Date: 2008-05-22 09:43:58 -0700 (Thu, 22 May 2008) $
+ */
+public class XMLDocumentStreamReader implements XMLStreamReader {
+    private static final int STATE_COMPLETE_AT_NEXT = 2; // The wrapper
+    // will produce
+    // END_DOCUMENT
+
+    private static final int STATE_COMPLETED = 3; // Done
+
+    private static final int STATE_INIT = 0; // The wrapper will produce
+    // START_DOCUMENT
+
+    private static final int STATE_SWITCHED = 1; // The real reader will
+    // produce events
+
+    private XMLStreamReader realReader;
+    private boolean fragment;
+    private int level = 0;
+
+    private int state = STATE_INIT;
+
+    public XMLDocumentStreamReader(XMLStreamReader realReader) {
+        if (realReader == null) {
+            throw new UnsupportedOperationException("Reader cannot be null");
+        }
+
+        this.realReader = realReader;
+        
+        if (realReader instanceof XMLFragmentStreamReader) {
+            ((XMLFragmentStreamReader)realReader).init();
+        }
+
+        // If the real reader is positioned at START_DOCUMENT, always use
+        // the real reader
+        if (realReader.getEventType() == START_DOCUMENT) {
+            fragment = false;
+            state = STATE_SWITCHED;
+        }
+    }
+
+    public void close() throws XMLStreamException {
+        realReader.close();
+    }
+
+    public int getAttributeCount() {
+        if (isDelegating()) {
+            return realReader.getAttributeCount();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getAttributeLocalName(int i) {
+        if (isDelegating()) {
+            return realReader.getAttributeLocalName(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public QName getAttributeName(int i) {
+        if (isDelegating()) {
+            return realReader.getAttributeName(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getAttributeNamespace(int i) {
+        if (isDelegating()) {
+            return realReader.getAttributeNamespace(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getAttributePrefix(int i) {
+        if (isDelegating()) {
+            return realReader.getAttributePrefix(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getAttributeType(int i) {
+        if (isDelegating()) {
+            return realReader.getAttributeType(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getAttributeValue(int i) {
+        if (isDelegating()) {
+            return realReader.getAttributeValue(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getAttributeValue(String s, String s1) {
+        if (isDelegating()) {
+            return realReader.getAttributeValue(s, s1);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getCharacterEncodingScheme() {
+        return realReader.getCharacterEncodingScheme();
+    }
+
+    public String getElementText() throws XMLStreamException {
+        if (isDelegating()) {
+            return realReader.getElementText();
+        } else {
+            throw new XMLStreamException();
+        }
+    }
+
+    public String getEncoding() {
+        return realReader.getEncoding();
+    }
+
+    public int getEventType() {
+        int event = -1;
+        switch (state) {
+            case STATE_SWITCHED:
+            case STATE_COMPLETE_AT_NEXT:
+                event = realReader.getEventType();
+                break;
+            case STATE_INIT:
+                event = START_DOCUMENT;
+                break;
+            case STATE_COMPLETED:
+                event = END_DOCUMENT;
+                break;
+        }
+        return event;
+    }
+
+    public String getLocalName() {
+        if (isDelegating()) {
+            return realReader.getLocalName();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public Location getLocation() {
+        if (isDelegating()) {
+            return realReader.getLocation();
+        } else {
+            return null;
+        }
+    }
+
+    public QName getName() {
+        if (isDelegating()) {
+            return realReader.getName();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public NamespaceContext getNamespaceContext() {
+        return realReader.getNamespaceContext();
+    }
+
+    public int getNamespaceCount() {
+        if (isDelegating()) {
+            return realReader.getNamespaceCount();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getNamespacePrefix(int i) {
+        if (isDelegating()) {
+            return realReader.getNamespacePrefix(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getNamespaceURI() {
+        if (isDelegating()) {
+            return realReader.getNamespaceURI();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getNamespaceURI(int i) {
+        if (isDelegating()) {
+            return realReader.getNamespaceURI(i);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getNamespaceURI(String s) {
+        if (isDelegating()) {
+            return realReader.getNamespaceURI(s);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getPIData() {
+        if (isDelegating()) {
+            return realReader.getPIData();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getPITarget() {
+        if (isDelegating()) {
+            return realReader.getPITarget();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getPrefix() {
+        if (isDelegating()) {
+            return realReader.getPrefix();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public Object getProperty(String s) throws IllegalArgumentException {
+        if (isDelegating()) {
+            return realReader.getProperty(s);
+        } else {
+            throw new IllegalArgumentException();
+        }
+    }
+
+    public String getText() {
+        if (isDelegating()) {
+            return realReader.getText();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public char[] getTextCharacters() {
+        if (isDelegating()) {
+            return realReader.getTextCharacters();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public int getTextCharacters(int i, char[] chars, int i1, int i2) throws XMLStreamException {
+        if (isDelegating()) {
+            return realReader.getTextCharacters(i, chars, i1, i2);
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public int getTextLength() {
+        if (isDelegating()) {
+            return realReader.getTextLength();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public int getTextStart() {
+        if (isDelegating()) {
+            return realReader.getTextStart();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
+    public String getVersion() {
+        if (isDelegating()) {
+            return realReader.getVersion();
+        } else {
+            return null;
+        }
+    }
+
+    public boolean hasName() {
+        if (isDelegating()) {
+            return realReader.hasName();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean hasNext() throws XMLStreamException {
+        if (state == STATE_COMPLETE_AT_NEXT) {
+            return true;
+        } else if (state == STATE_COMPLETED) {
+            return false;
+        } else if (state == STATE_SWITCHED) {
+            return realReader.hasNext();
+        } else {
+            return true;
+        }
+    }
+
+    public boolean hasText() {
+        if (isDelegating()) {
+            return realReader.hasText();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isAttributeSpecified(int i) {
+        if (isDelegating()) {
+            return realReader.isAttributeSpecified(i);
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isCharacters() {
+        if (isDelegating()) {
+            return realReader.isCharacters();
+        } else {
+            return false;
+        }
+    }
+
+    private boolean isDelegating() {
+        return state == STATE_SWITCHED || state == STATE_COMPLETE_AT_NEXT;
+    }
+
+    public boolean isEndElement() {
+        if (isDelegating()) {
+            return realReader.isEndElement();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isStandalone() {
+        if (isDelegating()) {
+            return realReader.isStandalone();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isStartElement() {
+        if (isDelegating()) {
+            return realReader.isStartElement();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean isWhiteSpace() {
+        if (isDelegating()) {
+            return realReader.isWhiteSpace();
+        } else {
+            return false;
+        }
+    }
+
+    public int next() throws XMLStreamException {
+        int returnEvent;
+
+        switch (state) {
+            case STATE_SWITCHED:
+                returnEvent = realReader.next();
+                if (returnEvent == END_DOCUMENT) {
+                    state = STATE_COMPLETED;
+                } else if (!realReader.hasNext()) {
+                    state = STATE_COMPLETE_AT_NEXT;
+                } 
+                if (fragment && returnEvent == END_ELEMENT) {
+                    level--;
+                    if (level == -1) {
+                        // We are now at the end of the top-level element in the fragment
+                        state = STATE_COMPLETE_AT_NEXT;
+                    }
+                }
+                if (fragment && returnEvent == START_ELEMENT) {
+                    level++;
+                }
+                break;
+            case STATE_INIT:
+                state = STATE_SWITCHED;
+                returnEvent = realReader.getEventType();
+                if (returnEvent == START_ELEMENT) {
+                    // The real reader is positioned at the top-level element in the fragment
+                    level = 0;
+                    fragment = true;
+                }
+                break;
+            case STATE_COMPLETE_AT_NEXT:
+                state = STATE_COMPLETED;
+                returnEvent = END_DOCUMENT;
+                break;
+            case STATE_COMPLETED:
+                // oops - no way we can go beyond this
+                throw new NoSuchElementException("End of stream has reached.");
+            default:
+                throw new UnsupportedOperationException();
+        }
+
+        return returnEvent;
+    }
+
+    public int nextTag() throws XMLStreamException {
+        if (isDelegating()) {
+            int returnEvent = realReader.nextTag();
+            if (fragment && returnEvent == END_ELEMENT) {
+                level--;
+                if (level == 0) {
+                    // We are now at the end of the top-level element in the fragment
+                    state = STATE_COMPLETE_AT_NEXT;
+                }
+            }
+            if (fragment && returnEvent == START_ELEMENT) {
+                level++;
+            }
+            return returnEvent;
+        } else {
+            throw new XMLStreamException();
+        }
+    }
+
+    public void require(int i, String s, String s1) throws XMLStreamException {
+        if (isDelegating()) {
+            realReader.require(i, s, s1);
+        }
+    }
+
+    public boolean standaloneSet() {
+        if (isDelegating()) {
+            return realReader.standaloneSet();
+        } else {
+            return false;
+        }
+    }
+}

Added: tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLEventsStreamReader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLEventsStreamReader.java?rev=709052&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLEventsStreamReader.java (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLEventsStreamReader.java Wed Oct 29 17:14:15 2008
@@ -0,0 +1,448 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.contribution.processor.xml;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Namespace;
+import javax.xml.stream.events.ProcessingInstruction;
+import javax.xml.stream.events.XMLEvent;
+
+
+public class XMLEventsStreamReader implements XMLStreamReader {
+
+	@SuppressWarnings("unused")
+	private ArrayList<XMLEvent> events = null;
+	@SuppressWarnings("unchecked")
+	private HashMap<String, NamespaceContext> eventContext = null;
+
+	private int state;
+	private java.util.Iterator<XMLEvent> iterator;
+	private XMLEvent current;
+
+	@SuppressWarnings("unchecked")
+	public XMLEventsStreamReader(List<XMLEvent> events,Map<String, NamespaceContext> map) {
+		this.events = (ArrayList<XMLEvent>) events;
+		this.eventContext = (HashMap<String, NamespaceContext>) map;
+		this.iterator = events.iterator();
+		this.current = iterator.next();
+		this.state = current.getEventType();
+	}
+
+	public void close() throws XMLStreamException {
+		this.events = null;
+		this.eventContext = null;
+		this.iterator = null;
+		this.current = null;
+	}
+
+	private void checkElementState() {
+		if (getEventType() != START_ELEMENT && getEventType() != END_ELEMENT) {
+			throw new IllegalStateException();
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public int getAttributeCount() {
+		checkElementState();
+		int count = 0;
+		Iterator<Attribute> iterator = current.asStartElement().getAttributes();
+		while (iterator.hasNext()) {
+			count++;
+			iterator.next();
+		}
+		return count;
+	}
+
+	/*
+	 * Custom method to get attribute from the specified index
+	 */
+	@SuppressWarnings("unchecked")
+	private Attribute getAttribute(int index) {
+		checkElementState();
+		int count = 0;
+		Attribute attribute = null;
+		Iterator<Attribute> iterator = current.asStartElement().getAttributes();
+		while (iterator.hasNext()) {
+			count++;
+			if (count == index) {
+				attribute = iterator.next();
+			} else {
+				iterator.next();
+			}
+		}
+		return attribute;
+	}
+
+	
+	public String getAttributeLocalName(int index) {
+		checkElementState();
+		return getAttribute(index).getName().getLocalPart();
+	}
+
+	public QName getAttributeName(int index) {
+		checkElementState();
+		return getAttribute(index).getName();
+	}
+
+	public String getAttributeNamespace(int index) {
+		checkElementState();
+		return getAttributeName(index).getNamespaceURI();
+	}
+
+	public String getAttributePrefix(int index) {
+		checkElementState();
+		return getAttributeName(index).getPrefix();
+	}
+
+	public String getAttributeType(int index) {
+		checkElementState();
+		return getAttribute(index).getDTDType();
+	}
+
+	public String getAttributeValue(int index) {
+		checkElementState();
+		return getAttribute(index).getValue();
+	}
+
+	@SuppressWarnings("unchecked")
+	public String getAttributeValue(String namespaceURI, String localName) {
+		checkElementState();
+		Iterator<Attribute> iterator = current.asStartElement().getAttributes();
+		Attribute attribute;
+		while (iterator.hasNext()) {
+			attribute = iterator.next();
+			if (attribute.getName().getNamespaceURI().equalsIgnoreCase(
+					namespaceURI)
+					&& attribute.getName().getLocalPart().equalsIgnoreCase(
+							localName)) {
+				return attribute.getValue();
+			}
+		}
+		return null;
+
+	}
+
+	public String getCharacterEncodingScheme() {
+		return "UTF-8";
+	}
+
+	public String getElementText() throws XMLStreamException {
+		checkElementState();
+		int eventType = getEventType();
+		String elementText = null;
+
+		if (eventType == START_ELEMENT) {
+			elementText = current.asStartElement().getName().getLocalPart();
+		} else if (eventType == END_ELEMENT) {
+			elementText = current.asEndElement().getName().getLocalPart();
+		}
+		return elementText;
+	}
+
+	public String getEncoding() {
+		return "UTF-8";
+	}
+
+	public int getEventType() {
+		return state;
+	}
+
+	public String getLocalName() {
+		checkElementState();
+		switch (current.getEventType()) {
+		case START_ELEMENT:
+			return current.asStartElement().getName().getLocalPart();
+		case END_ELEMENT:
+			return current.asEndElement().getName().getLocalPart();
+		}
+		return null;
+	}
+
+	public Location getLocation() {
+		return current.getLocation();
+	}
+
+	public QName getName() {
+		checkElementState();
+		switch (current.getEventType()) {
+		case START_ELEMENT:
+			return current.asStartElement().getName();
+		case END_ELEMENT:
+			return current.asEndElement().getName();
+		}
+		return null;
+	}
+
+	public NamespaceContext getNamespaceContext() {
+		checkElementState();
+		//return new TuscanyNamespaceContext(eventContext.get(getLocalName()));
+		return eventContext.get(getLocalName());
+	}
+
+	@SuppressWarnings("unchecked")
+	public int getNamespaceCount() {
+		int count = 0;
+		Iterator<Namespace> itr = current.asStartElement().getNamespaces();
+		while (itr.hasNext()) {
+			count++;
+			itr.next();
+		}
+		return count;
+	}
+
+	@SuppressWarnings("unchecked")
+	public String getNamespacePrefix(int index) {
+		Iterator<Namespace> itr = current.asStartElement().getNamespaces();
+		int level = 0;
+		Namespace ns = null;
+		while (itr.hasNext()) {
+			ns = itr.next();
+			if (level == index) {
+				return ns.getPrefix();
+			}
+			level++;
+		}
+		return null;
+	}
+
+	public String getNamespaceURI() {
+		checkElementState();
+		switch (current.getEventType()) {
+		case START_ELEMENT:
+			return current.asStartElement().getName().getNamespaceURI();
+		case END_ELEMENT:
+			return current.asEndElement().getName().getNamespaceURI();
+		}
+		return null;
+	}
+
+	public String getNamespaceURI(String prefix) {
+		return getNamespaceContext().getNamespaceURI(prefix);
+	}
+
+	@SuppressWarnings("unchecked")
+	public String getNamespaceURI(int index) {
+		Iterator<Namespace> itr = current.asStartElement().getNamespaces();
+		int level = 0;
+		Namespace ns = null;
+		while (itr.hasNext()) {
+			ns = itr.next();
+			if (level == index) {
+				return ns.getNamespaceURI();
+			}
+			level++;
+		}
+		return null;
+	}
+
+	public String getPIData() {
+		if (current.isProcessingInstruction()) {
+			ProcessingInstruction pi = (ProcessingInstruction) current;
+			return pi.getData();
+		} else {
+			throw new IllegalStateException(current.toString());
+		}
+	}
+
+	public String getPITarget() {
+		if (current.isProcessingInstruction()) {
+			ProcessingInstruction pi = (ProcessingInstruction) current;
+			return pi.getTarget();
+		} else {
+			throw new IllegalStateException(current.toString());
+		}
+	}
+
+	public String getPrefix() {
+		checkElementState();
+		if (current.isStartElement()) {
+			return current.asStartElement().getName().getPrefix();
+		}
+		return null;
+	}
+
+	/*
+	 * FIXME: Implementation pending... 
+	 * 
+	 * @see (non-Javadoc)
+	 * javax.xml.stream.util.StreamReaderDelegate#getProperty(java.lang.String)
+	 */
+	public Object getProperty(String name) throws IllegalArgumentException {
+		// TODO Auto-generated method stub
+
+		return null;
+	}
+
+	public String getText() {
+		if (current.isCharacters()) {
+			return current.asCharacters().getData();
+		} else {
+			throw new IllegalStateException(current.toString());
+		}
+	}
+
+	public char[] getTextCharacters() {
+		if (current.isCharacters()) {
+			return current.asCharacters().getData().toCharArray();
+		} else {
+			throw new IllegalStateException(current.toString());
+		}
+	}
+
+	/*
+	 * FIXME: Implementation pending... (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.util.StreamReaderDelegate#getTextCharacters(int,
+	 * char[], int, int)
+	 */
+	public int getTextCharacters(int sourceStart, char[] target,
+			int targetStart, int length) throws XMLStreamException {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/*
+	 * FIXME:Implementaion can be improved (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.util.StreamReaderDelegate#getTextLength()
+	 */
+	public int getTextLength() {
+		if (current.isCharacters()) {
+			return current.asCharacters().getData().length();
+		} else {
+			throw new IllegalStateException(current.toString());
+		}
+	}
+
+	/*
+	 * FIXME: Implementation pending... (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.util.StreamReaderDelegate#getTextStart()
+	 */
+	public int getTextStart() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/*
+	 * FIXME: Implementation pending... (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.util.StreamReaderDelegate#getTextStart()
+	 */
+	public String getVersion() {
+		// TODO Auto-generated method stub
+
+		return null;
+	}
+
+	public boolean hasName() {
+		return false;
+	}
+
+	public boolean hasNext() throws XMLStreamException {
+		return iterator.hasNext() || state != END_DOCUMENT;
+
+	}
+
+	public boolean hasText() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/*
+	 * FIXME: Implementation pending... (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.util.StreamReaderDelegate#getTextStart()
+	 */
+	public boolean isAttributeSpecified(int index) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isCharacters() {
+		return current.isCharacters();
+	}
+
+	public boolean isEndElement() {
+		return current.isEndElement();
+	}
+
+	public boolean isStandalone() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isStartElement() {
+		return current.isStartElement();
+	}
+
+	public boolean isWhiteSpace() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public int next() throws XMLStreamException {
+		if (!hasNext()) {
+			throw new IllegalStateException("No more events");
+		}
+		if (!iterator.hasNext()) {
+			state = END_DOCUMENT;
+			current = null;
+			return state;
+		}
+		current = iterator.next();
+		state = current.getEventType();
+		return state;
+	}
+
+	public int nextTag() throws XMLStreamException {
+		return iterator.next().getEventType();
+	}
+
+	public void require(int type, String namespaceURI, String localName)
+			throws XMLStreamException {
+		boolean require = false;
+		String uri = getNamespaceURI();
+		String name = getLocalName();
+		if (state == type && namespaceURI.equals(uri) && localName.equals(name)) {
+			require = true;
+		}
+		if (require != true) {
+			throw new XMLStreamException();
+		}
+	}
+
+	public boolean standaloneSet() {
+		return false;
+	}
+
+}

Added: tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLFragmentStreamReader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLFragmentStreamReader.java?rev=709052&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLFragmentStreamReader.java (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/XMLFragmentStreamReader.java Wed Oct 29 17:14:15 2008
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.contribution.processor.xml;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+public interface XMLFragmentStreamReader extends XMLStreamReader {
+    QName NIL_QNAME = new QName("http://www.w3.org/2001/XMLSchema-instance", "nil", "xsi");
+    String NIL_VALUE_TRUE = "true";
+
+    /**
+     * this will help to handle Text within the current element. user should
+     * pass the element text to the property list as this ELEMENT_TEXT as the
+     * key. This key deliberately has a space in it so that it is not a valid
+     * XML name
+     */
+    String ELEMENT_TEXT = "Element Text";
+
+    /**
+     * Extra method to query the state of the pullparser
+     */
+    boolean isDone();
+
+    /**
+     * add the parent namespace context to this parser
+     */
+    void setParentNamespaceContext(NamespaceContext nsContext);
+
+    /**
+     * Initiate the parser - this will do whatever the needed tasks to initiate
+     * the parser and must be called before attempting any specific parsing
+     * using this parser
+     */
+    void init();
+}

Added: tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java?rev=709052&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java Wed Oct 29 17:14:15 2008
@@ -0,0 +1,124 @@
+package org.apache.tuscany.sca.contribution.processor;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Stack;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+
+@SuppressWarnings("unused")
+public class TuscanyNamespaceContext implements NamespaceContext {
+
+	private Stack<ArrayList<ArrayList<String>>> context = null;
+
+	public TuscanyNamespaceContext(Stack<ArrayList<ArrayList<String>>> context){
+		this.context = context;
+	}
+
+	public String getNamespaceURI(String prefix) {
+		if (prefix == null) {
+			throw new IllegalArgumentException();
+		}
+		return (String) getResult("getNSUri",prefix);
+	}
+
+	public String getPrefix(String namespaceURI) {
+		if (namespaceURI == null) {
+			throw new IllegalArgumentException();
+		}
+		return (String) getResult("getPrefix",namespaceURI);
+	}
+
+	@SuppressWarnings("unchecked")
+	public Iterator<String> getPrefixes(String namespaceURI) {
+		if (namespaceURI == null) {
+			throw new IllegalArgumentException();
+		}
+		
+		Iterator<String> iterator = new Itr<String>((Iterator<String>) getResult("getPrefixes",namespaceURI));
+		return iterator;
+	}
+	
+	/*
+	 * Generic method to Iterate through the Stack and return required result(s) 
+	 */
+	private Object getResult(String operation,String arg){
+		
+		ArrayList<ArrayList<String>> contextList = null;
+		Iterator<String> prefItr = null;
+		Iterator<String> uriItr = null;
+		
+		List<String> list = new ArrayList<String>();;
+		
+		String toCompare = null;
+		
+		String tempPrefix = null;
+		String tempUri = null ;
+		
+		for(int i  = context.size()-1; i>=0;i--){
+			contextList = context.get(i);
+			prefItr = ((ArrayList<String>)contextList.get(0)).iterator();
+			uriItr = ((ArrayList<String>)contextList.get(1)).iterator();
+			for(int j = 0;uriItr.hasNext();j++){
+				tempPrefix = (String) prefItr.next();
+				tempUri = (String) uriItr.next();
+				if(operation.equalsIgnoreCase("getNSUri")){
+					toCompare = tempPrefix;
+				}
+				else if(operation.equalsIgnoreCase("getPrefix")){
+					toCompare = tempUri;
+				}
+				else if(operation.equalsIgnoreCase("getPrefixes")){
+					toCompare = tempUri;
+				}
+				if(toCompare != null && arg.equalsIgnoreCase(toCompare)){
+					if(operation.equalsIgnoreCase("getNSUri")){
+						return tempUri;
+					}
+					else if(operation.equalsIgnoreCase("getPrefix")){
+						return tempPrefix;
+					}
+					else if(operation.equalsIgnoreCase("getPrefixes")){
+						list.add(tempPrefix);
+						
+					}
+					
+				}
+			}
+		}
+		
+		if(operation.equalsIgnoreCase("getPrefixes")){
+			return list.iterator();
+		}
+		
+		return null;
+	}
+
+	/*
+	 * Custom implementation of the Iterator interface to override the behavior of the remove() method.
+	 * The iterator should not be modifiable and invocation of the remove() method should throw UnsupportedOperationException. 
+	 */
+	private class Itr<E> implements Iterator<E>{
+		Iterator<E> iterator = null;
+
+		Itr(Iterator<E> inputItr){
+			this.iterator = inputItr;
+		}
+		
+		public boolean hasNext() {
+			return this.iterator.hasNext();
+		}
+
+		public E next() {
+			return (E) this.iterator.next();
+		}
+
+		public void remove() {
+			throw new  UnsupportedOperationException();
+		}
+	} //end of class Itr<E>
+	
+	
+} //end of Class

Added: tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyXMLStreamReader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyXMLStreamReader.java?rev=709052&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyXMLStreamReader.java (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyXMLStreamReader.java Wed Oct 29 17:14:15 2008
@@ -0,0 +1,112 @@
+package org.apache.tuscany.sca.contribution.processor;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.util.StreamReaderDelegate;
+import javax.xml.XMLConstants;
+
+/*
+ * Custom implementaion of the XMLStreamReader to keep track of the namespace context for each element
+ */
+public class TuscanyXMLStreamReader extends StreamReaderDelegate implements
+		XMLStreamReader {
+
+	Stack<ArrayList<ArrayList<String>>> context = new Stack<ArrayList<ArrayList<String>>>();
+	
+	List contextList;
+	List<String> prefixList;
+	List<String> uriList;
+
+	public TuscanyXMLStreamReader(XMLStreamReader reader) {
+		super(reader);
+	}
+
+	public void pushContext() throws XMLStreamException {
+		contextList = new ArrayList<ArrayList<String>>();
+		prefixList = new ArrayList<String>();
+		uriList = new ArrayList<String>();
+		int namespaceCount = this.getNamespaceCount();
+		if (namespaceCount == 0) {
+			prefixList.add(null);
+			uriList.add(null);
+		}
+		for (int i = 0; i < namespaceCount; i++) {
+			prefixList.add(checkString(this.getNamespacePrefix(i)));
+			uriList.add(this.getNamespaceURI(i));
+		}
+		contextList.add(prefixList);
+		contextList.add(uriList);
+		context.push((ArrayList) contextList);
+	}
+
+	private String checkString(String namespacePrefix) {
+		if (namespacePrefix == null) {
+			return XMLConstants.DEFAULT_NS_PREFIX;
+		} else {
+			return namespacePrefix;
+		}
+	}
+
+	public void popContext() throws XMLStreamException {
+		context.pop();
+	}
+
+	/*
+	 * Overriding the next() method to perform PUSH and POP operations 
+	 * for the NamespaceContext for the current element
+	 */
+			
+	@Override
+	public int next() throws XMLStreamException {
+		// POP the context if the element ends
+		if (this.getEventType() == END_ELEMENT) {
+			popContext();
+		}
+		
+		//get the next event 
+		int nextEvent = super.next();
+		//PUSH the events info onto the Stack 
+		if (nextEvent == START_ELEMENT) {
+			pushContext();
+		}
+		return nextEvent;
+	}
+	
+	@Override
+	public int nextTag() throws XMLStreamException {
+		if (this.getEventType() == START_ELEMENT) {
+			pushContext();
+		}
+		if (this.getEventType() == END_ELEMENT) {
+			popContext();
+		}
+		return super.nextTag();
+	}
+	
+	@Override
+	public NamespaceContext getNamespaceContext(){
+		return new TuscanyNamespaceContext((Stack)context.clone());
+	}
+}

Modified: tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java Wed Oct 29 17:14:15 2008
@@ -21,6 +21,7 @@
 
 import java.util.logging.Logger;
 
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
 import javax.xml.stream.XMLStreamConstants;
@@ -47,7 +48,8 @@
  *
  * @version $Rev$ $Date$
  */
-class ValidatingXMLStreamReader extends StreamReaderDelegate implements XMLStreamReader {
+class ValidatingXMLStreamReader extends TuscanyXMLStreamReader implements XMLStreamReader {
+
     private static final Logger logger = Logger.getLogger(ValidatingXMLStreamReader.class.getName());
     
     private int level;
@@ -260,6 +262,11 @@
         }
     }
     
+    @Override
+    public NamespaceContext getNamespaceContext(){
+    	return super.getNamespaceContext();
+    }
+    
     /**
      * Handle a start element event.
      * 

Added: tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java.orig
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java.orig?rev=709052&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java.orig (added)
+++ tuscany/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidatingXMLStreamReader.java.orig Wed Oct 29 17:14:15 2008
@@ -0,0 +1,388 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.contribution.processor;
+
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.util.StreamReaderDelegate;
+import javax.xml.validation.Schema;
+import javax.xml.validation.ValidatorHandler;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.AttributesImpl;
+import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.Problem;
+import org.apache.tuscany.sca.monitor.Problem.Severity;
+
+/**
+ * 
+ * A validating XMLStreamReader that reports XMLSchema validation errors.
+ *
+ * @version $Rev: 667376 $ $Date: 2008-06-12 23:29:16 -0700 (Thu, 12 Jun 2008) $
+ */
+class ValidatingXMLStreamReader extends StreamReaderDelegate implements XMLStreamReader {
+    private static final Logger logger = Logger.getLogger(ValidatingXMLStreamReader.class.getName());
+    
+    private int level;
+    private ValidatorHandler handler;
+    private final Monitor monitor;
+    
+    /**
+     * Constructs a new ValidatingXMLStreamReader.
+     * 
+     * @param reader
+     * @param schema
+     * @throws XMLStreamException
+     */
+    ValidatingXMLStreamReader(XMLStreamReader reader, Schema schema, Monitor monitor) throws XMLStreamException {
+        super(reader);
+        this.monitor = monitor;
+        if (schema == null) {
+            return;
+        }
+        
+        handler = schema.newValidatorHandler();
+        handler.setDocumentLocator(new LocatorAdapter());
+        try {
+            handler.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
+        } catch (SAXException e) {
+        	XMLStreamException xse = new XMLStreamException(e);
+        	error("XMLStreamException", handler, xse);
+            throw xse;
+        }
+        
+        // These validation errors are just warnings for us as we want to support
+        // running from an XML document with XSD validation errors, as long as we can
+        // get the metadata we need from the document
+        handler.setErrorHandler(new ErrorHandler() {        	
+            private String getMessage(SAXParseException e) {
+                return "XMLSchema validation problem in: " + e.getSystemId() + ", line: " + e.getLineNumber() + ", column: " + e.getColumnNumber() + "\n" + e.getMessage();
+            }
+            
+            public void error(SAXParseException exception) throws SAXException {            	
+            	if (ValidatingXMLStreamReader.this.monitor == null)
+            		logger.warning(getMessage(exception));
+            	else            		
+            		ValidatingXMLStreamReader.this.error("SchemaError", ValidatingXMLStreamReader.this.getClass(), exception.getSystemId(), 
+                   		exception.getLineNumber(), exception.getColumnNumber(), exception.getMessage());                              
+            }
+            
+            public void fatalError(SAXParseException exception) throws SAXException {            	
+            	if (ValidatingXMLStreamReader.this.monitor == null)
+            		logger.warning(getMessage(exception));
+            	else
+            		ValidatingXMLStreamReader.this.error("SchemaFatalError", ValidatingXMLStreamReader.this.getClass(), exception.getSystemId(), 
+                       	exception.getLineNumber(), exception.getColumnNumber(), exception.getMessage());               
+            }
+            
+            public void warning(SAXParseException exception) throws SAXException {
+            	if (ValidatingXMLStreamReader.this.monitor == null)
+            		logger.warning(getMessage(exception));
+            	else
+            		ValidatingXMLStreamReader.this.warning("SchemaWarning", ValidatingXMLStreamReader.this.getClass(), exception.getSystemId(), 
+                       	exception.getLineNumber(), exception.getColumnNumber(), exception.getMessage());                
+            }
+        });
+    }
+    
+    /**
+     * Report a warning.
+     * 
+     * @param problems
+     * @param message
+     * @param model
+     */
+    private void warning(String message, Object model, Object... messageParameters) {
+        if (monitor != null) {
+            Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
+            monitor.problem(problem);
+    	}
+    }
+    
+    /**
+     * Report a error.
+     * 
+     * @param problems
+     * @param message
+     * @param model
+     */
+    private void error(String message, Object model, Object... messageParameters) {
+        if (monitor != null) {
+            Problem problem = new ProblemImpl(this.getClass().getName(), "contribution-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
+            monitor.problem(problem);
+        }
+    }
+
+    @Override
+    public int next() throws XMLStreamException {
+        if (handler == null) {
+            return super.next();
+        }
+
+        int event = super.next();
+        try {
+            switch (event) {
+                case XMLStreamConstants.START_DOCUMENT:
+                    level++;
+                    handler.startDocument();
+                    break;
+                case XMLStreamConstants.START_ELEMENT:
+                    level++;
+                    handleStartElement();
+                    break;
+                case XMLStreamConstants.PROCESSING_INSTRUCTION:
+                    handler.processingInstruction(super.getPITarget(), super.getPIData());
+                    break;
+                case XMLStreamConstants.CHARACTERS:
+                case XMLStreamConstants.CDATA:
+                case XMLStreamConstants.SPACE:
+                case XMLStreamConstants.ENTITY_REFERENCE:
+                    handler.characters(super.getTextCharacters(), super.getTextStart(), super.getTextLength());
+                    break;
+                case XMLStreamConstants.END_ELEMENT:
+                    handleEndElement();
+                    level--;
+                    break;
+                case XMLStreamConstants.END_DOCUMENT:
+                    handler.endDocument();
+                    break;
+            }
+        } catch (SAXException e) {
+        	XMLStreamException xse = new XMLStreamException(e.getMessage(), e);
+        	error("XMLStreamException", handler, xse);
+            throw xse;
+        }
+        return event;
+    }
+    
+    @Override
+    public int nextTag() throws XMLStreamException {
+        if (handler == null) {
+            return super.nextTag();
+        }
+        
+        for (;;) {
+            int event = super.getEventType();
+            try {
+                switch (event) {
+                    case XMLStreamConstants.START_DOCUMENT:
+                        level++;
+                        handler.startDocument();
+                        break;
+                    case XMLStreamConstants.START_ELEMENT:
+                        level++;
+                        handleStartElement();
+                        return event;
+                    case XMLStreamConstants.PROCESSING_INSTRUCTION:
+                        handler.processingInstruction(super.getPITarget(), super.getPIData());
+                        break;
+                    case XMLStreamConstants.CHARACTERS:
+                    case XMLStreamConstants.CDATA:
+                    case XMLStreamConstants.SPACE:
+                    case XMLStreamConstants.ENTITY_REFERENCE:
+                        handler.characters(super.getTextCharacters(), super.getTextStart(), super.getTextLength());
+                        break;
+                    case XMLStreamConstants.END_ELEMENT:
+                        handleEndElement();
+                        level--;
+                        return event;
+                    case XMLStreamConstants.END_DOCUMENT:
+                        handler.endDocument();
+                        return event;
+                }
+            } catch (SAXException e) {
+            	XMLStreamException xse = new XMLStreamException(e);
+            	error("XMLStreamException", handler, xse);
+                throw xse;
+            }
+            super.next();
+        }
+    }
+    
+    @Override
+    public String getElementText() throws XMLStreamException {
+        if (handler == null) {
+            return super.getElementText();
+        }
+
+        if (getEventType() != XMLStreamConstants.START_ELEMENT) {
+            return super.getElementText();
+        }
+        StringBuffer text = new StringBuffer();
+
+        for (;;) {
+            int event = next();
+            switch (event) {
+                case XMLStreamConstants.END_ELEMENT:
+                    return text.toString();
+                    
+                case XMLStreamConstants.COMMENT:
+                case XMLStreamConstants.PROCESSING_INSTRUCTION:
+                    continue;
+                    
+                case CHARACTERS:
+                case CDATA:
+                case SPACE:
+                case ENTITY_REFERENCE:
+                    text.append(getText());
+                    break;
+                    
+                default:
+                    break;
+            }
+        }
+    }
+    
+    /**
+     * Handle a start element event.
+     * 
+     * @throws SAXException
+     */
+    private void handleStartElement() throws SAXException {
+
+        // send startPrefixMapping events immediately before startElement event
+        int nsCount = super.getNamespaceCount();
+        for (int i = 0; i < nsCount; i++) {
+            String prefix = super.getNamespacePrefix(i);
+            if (prefix == null) { // true for default namespace
+                prefix = "";
+            }
+            handler.startPrefixMapping(prefix, super.getNamespaceURI(i));
+        }
+
+        // fire startElement
+        QName qname = super.getName();
+        String prefix = qname.getPrefix();
+        String rawname;
+        if (prefix == null || prefix.length() == 0) {
+            rawname = qname.getLocalPart();
+        } else {
+            rawname = prefix + ':' + qname.getLocalPart();
+        }
+        Attributes attrs = getAttributes();
+        handler.startElement(qname.getNamespaceURI(), qname.getLocalPart(), rawname, attrs);
+    }
+
+    /**
+     * Handle an endElement event.
+     * 
+     * @throws SAXException
+     */
+    private void handleEndElement() throws SAXException {
+
+        // fire endElement
+        QName qname = super.getName();
+        handler.endElement(qname.getNamespaceURI(), qname.getLocalPart(), qname.toString());
+
+        // send endPrefixMapping events immediately after endElement event
+        // we send them in the opposite order to that returned but this is not
+        // actually required by SAX
+        int nsCount = super.getNamespaceCount();
+        for (int i = nsCount - 1; i >= 0; i--) {
+            String prefix = super.getNamespacePrefix(i);
+            if (prefix == null) { // true for default namespace
+                prefix = "";
+            }
+            handler.endPrefixMapping(prefix);
+        }
+    }
+
+    /**
+     * Get the attributes associated with the current START_ELEMENT event.
+     * 
+     * @return the StAX attributes converted to org.xml.sax.Attributes
+     */
+    private Attributes getAttributes() {
+        AttributesImpl attrs = new AttributesImpl();
+
+        // add namespace declarations
+        for (int i = 0; i < super.getNamespaceCount(); i++) {
+            String prefix = super.getNamespacePrefix(i);
+            String uri = super.getNamespaceURI(i);
+            if (prefix == null) {
+                attrs.addAttribute("", "", "xmlns", "CDATA", uri);
+            } else {
+                attrs.addAttribute("", "", "xmlns:" + prefix, "CDATA", uri);
+            }
+        }
+
+        // Regular attributes
+        for (int i = 0; i < super.getAttributeCount(); i++) {
+            String uri = super.getAttributeNamespace(i);
+            if (uri == null) {
+                uri = "";
+            }
+            String localName = super.getAttributeLocalName(i);
+            String prefix = super.getAttributePrefix(i);
+            String qname;
+            if (prefix == null || prefix.length() == 0) {
+                qname = localName;
+            } else {
+                qname = prefix + ':' + localName;
+            }
+            String type = super.getAttributeType(i);
+            String value = super.getAttributeValue(i);
+
+            attrs.addAttribute(uri, localName, qname, type, value);
+        }
+
+        return attrs;
+    }
+
+    /**
+     * Adapter for mapping Locator information.
+     */
+    private final class LocatorAdapter implements Locator {
+
+        private LocatorAdapter() {
+        }
+
+        public int getColumnNumber() {
+            Location location = getLocation();
+            return location == null ? 0 : location.getColumnNumber();
+        }
+
+        public int getLineNumber() {
+            Location location = getLocation();
+            return location == null ? 0 : location.getLineNumber();
+        }
+
+        public String getPublicId() {
+            Location location = getLocation();
+            return location == null ? "" : location.getPublicId();
+        }
+
+        public String getSystemId() {
+            Location location = getLocation();
+            return location == null ? "" : location.getSystemId();
+        }
+    }
+    
+}

Modified: tuscany/branches/sca-java-1.3.3/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java?rev=709052&r1=709051&r2=709052&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/DomainManagerUtil.java Wed Oct 29 17:14:15 2008
@@ -23,6 +23,7 @@
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLConnection;
 
@@ -124,14 +125,25 @@
      * @throws MalformedURLException
      */
     static URL locationURL(String location) throws MalformedURLException {
-        URI uri = URI.create(location);
-        String scheme = uri.getScheme();
+        String scheme = null; 
+        URI uri = null;
+        
+        IllegalArgumentException uriException = null;
+        try {
+            uri = URI.create(location);
+            scheme = uri.getScheme();
+        }catch (java.lang.IllegalArgumentException e) {
+            uriException = e;
+        }
+        
         if (scheme == null) {
             File file = new File(location);
             return file.toURI().toURL();
         } else if (scheme.equals("file")) {
             File file = new File(location.substring(5));
             return file.toURI().toURL();
+        } else if(uri == null){
+            throw uriException;
         } else {
             return uri.toURL();
         }