You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/03 10:34:53 UTC

svn commit: r525085 [1/2] - in /incubator/tuscany/java/sca/scdl4j: ./ assembly-xml/ assembly-xml/src/main/java/org/apache/tuscany/assembly/ assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/ assembly-xml/src/main/java/org/apache/tuscany/assemb...

Author: jsdelfino
Date: Tue Apr  3 01:34:51 2007
New Revision: 525085

URL: http://svn.apache.org/viewvc?view=rev&rev=525085
Log:
Refactored the stax loaders and integrated the other loader modules with them.

Added:
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/test/java/org/apache/tuscany/assembly/
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadAllTestCase.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/ReadTestCase.java   (with props)
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/test/java/org/apache/tuscany/assembly/xml/StAXPerfTest.java   (with props)
Removed:
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/scdl/
    incubator/tuscany/java/sca/scdl4j/assembly-xml/src/test/java/org/apache/tuscany/scdl/
    incubator/tuscany/java/sca/scdl4j/idl-java-xml/src/main/java/org/apache/tuscany/idl/java/xml/JavaInterfaceHandler.java
    incubator/tuscany/java/sca/scdl4j/idl-java-xml/src/test/java/org/apache/tuscany/idl/java/xml/SAXReadTestCase.java
    incubator/tuscany/java/sca/scdl4j/idl-wsdl-xml/src/main/java/org/apache/tuscany/idl/wsdl/xml/WSDLInterfaceHandler.java
    incubator/tuscany/java/sca/scdl4j/idl-wsdl-xml/src/test/java/org/apache/tuscany/idl/wsdl/xml/SAXReadTestCase.java
    incubator/tuscany/java/sca/scdl4j/impl-java-xml/src/main/java/org/apache/tuscany/implementation/java/xml/JavaImplementationHandler.java
    incubator/tuscany/java/sca/scdl4j/impl-java-xml/src/test/java/org/apache/tuscany/implementation/java/xml/SAXReadTestCase.java
Modified:
    incubator/tuscany/java/sca/scdl4j/assembly-xml/pom.xml
    incubator/tuscany/java/sca/scdl4j/idl-java-xml/src/main/java/org/apache/tuscany/idl/java/xml/JavaConstants.java
    incubator/tuscany/java/sca/scdl4j/idl-java-xml/src/main/java/org/apache/tuscany/idl/java/xml/JavaInterfaceLoader.java
    incubator/tuscany/java/sca/scdl4j/idl-java-xml/src/test/java/org/apache/tuscany/idl/java/xml/ReadTestCase.java
    incubator/tuscany/java/sca/scdl4j/idl-wsdl-xml/src/main/java/org/apache/tuscany/idl/wsdl/xml/WSDLConstants.java
    incubator/tuscany/java/sca/scdl4j/idl-wsdl-xml/src/main/java/org/apache/tuscany/idl/wsdl/xml/WSDLInterfaceLoader.java
    incubator/tuscany/java/sca/scdl4j/idl-wsdl-xml/src/test/java/org/apache/tuscany/idl/wsdl/xml/ReadTestCase.java
    incubator/tuscany/java/sca/scdl4j/impl-java-xml/src/main/java/org/apache/tuscany/implementation/java/xml/JavaImplementationConstants.java
    incubator/tuscany/java/sca/scdl4j/impl-java-xml/src/main/java/org/apache/tuscany/implementation/java/xml/JavaImplementationLoader.java
    incubator/tuscany/java/sca/scdl4j/impl-java-xml/src/test/java/org/apache/tuscany/implementation/java/xml/ReadTestCase.java
    incubator/tuscany/java/sca/scdl4j/pom.xml

Modified: incubator/tuscany/java/sca/scdl4j/assembly-xml/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/pom.xml?view=diff&rev=525085&r1=525084&r2=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/pom.xml (original)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/pom.xml Tue Apr  3 01:34:51 2007
@@ -25,7 +25,7 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>tuscany-assembly-stax</artifactId>
+    <artifactId>tuscany-assembly-xml</artifactId>
     <version>0.1-incubating-SNAPSHOT</version>
     <packaging>jar</packaging>
     <name>Apache Tuscany SCA XML Assembly Support</name>

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,69 @@
+/*
+ * 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.assembly.xml;
+
+import javax.xml.namespace.QName;
+
+public interface Constants {
+    String SCA10_NS = "http://www.osoa.org/xmlns/sca/1.0";
+    String COMPONENT_TYPE = "componentType";
+    QName COMPONENT_TYPE_QNAME = new QName(SCA10_NS, COMPONENT_TYPE);
+    String SERVICE = "service";
+    QName SERVICE_QNAME = new QName(SCA10_NS, SERVICE);
+    String REFERENCE = "reference";
+    QName REFERENCE_QNAME = new QName(SCA10_NS, REFERENCE);
+    String PROPERTY = "property";
+    QName PROPERTY_QNAME = new QName(SCA10_NS, PROPERTY);
+    String CONSTRAINING_TYPE = "constrainingType";
+    QName CONSTRAINING_TYPE_QNAME = new QName(SCA10_NS, CONSTRAINING_TYPE);
+    String COMPOSITE = "composite";
+    QName COMPOSITE_QNAME = new QName(SCA10_NS, COMPOSITE);
+    String INCLUDE = "include";
+    QName INCLUDE_QNAME = new QName(SCA10_NS, INCLUDE);
+    String COMPONENT = "component";
+    QName COMPONENT_QNAME = new QName(SCA10_NS, COMPONENT);
+    String WIRE = "wire";
+    QName WIRE_QNAME = new QName(SCA10_NS, WIRE);
+    String NAME = "name";
+    String TARGET_NAMESPACE = "targetNamespace";
+    String LOCAL = "local";
+    String AUTOWIRE = "autowire";
+    String REQUIRES = "requires";
+    String POLICY_SETS = "policySets";
+    String OPERATION = "operation";
+    QName OPERATION_QNAME = new QName(SCA10_NS, OPERATION);
+    String CALLBACK = "callback";
+    QName CALLBACK_QNAME = new QName(SCA10_NS, CALLBACK);
+    String PROMOTE = "promote";
+    String TARGET = "target";
+    String WIRED_BY_IMPL = "wiredByImpl";
+    String MULTIPLICITY = "multiplicity";
+    String TYPE = "type";
+    String ELEMENT = "element";
+    String MANY = "many";
+    String MUST_SUPPLY = "mustSupply";
+    String SOURCE = "source";
+    String FILE = "file";
+    String URI = "uri";
+    String ZERO_ONE = "0..1";
+    String ZERO_N = "0..n";
+    String ONE_ONE = "1..1";
+    String ONE_N = "1..n";
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Constants.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,33 @@
+/*
+ * 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.assembly.xml;
+
+/**
+ * Denotes an invalid configuration artifact
+ *
+ * @version $Rev$ $Date$
+ */
+public class InvalidConfigurationException extends LoaderException {
+    private static final long serialVersionUID = -4312958640212000366L;
+
+	public InvalidConfigurationException(String message, Throwable cause) {
+		super(message, cause);
+	}
+    
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/InvalidConfigurationException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,31 @@
+/*
+ * 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.assembly.xml;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * A content handler for SCDL implementation elements.
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface Loader<T> {
+    T load(XMLStreamReader reader) throws XMLStreamException;
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/Loader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,80 @@
+/*
+ * 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.assembly.xml;
+
+
+/**
+ * Base class for Exceptions raised during the loading process. Loader implementations should throw a subclass of this
+ * to indicate the actual problem.
+ *
+ * @version $Rev$ $Date$
+ */
+public class LoaderException extends RuntimeException {
+    public static final int UNDEFINED = -1;
+    private static final long serialVersionUID = -7459051598906813461L;
+    private String resourceURI;
+    private int line = UNDEFINED;
+    private int column = UNDEFINED;
+
+    public LoaderException(String message) {
+        super(message);
+    }
+
+    public LoaderException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public LoaderException(Throwable cause) {
+        super(cause);
+    }
+    
+    /**
+     * Returns the location of the resource that was being loaded.
+     *
+     * @return the location of the resource that was being loaded
+     */
+    public String getResourceURI() {
+        return resourceURI;
+    }
+
+    /**
+     * Sets the location of the resource that was being loaded.
+     *
+     * @param resourceURI the location of the resource that was being loaded
+     */
+    public void setResourceURI(String resourceURI) {
+        this.resourceURI = resourceURI;
+    }
+
+    public int getLine() {
+        return line;
+    }
+
+    public void setLine(int line) {
+        this.line = line;
+    }
+
+    public int getColumn() {
+        return column;
+    }
+
+    public void setColumn(int column) {
+        this.column = column;
+    }
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,46 @@
+/*
+ * 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.assembly.xml;
+
+import javax.xml.namespace.QName;
+
+/**
+ * A registry for SCDL content handlers.
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface LoaderRegistry extends Loader {
+
+    /**
+     * Registers a content handler with an XML element qname.
+     * 
+     * @param qname
+     * @param handler
+     */
+    void addLoader(QName element, Loader handler);
+
+    /**
+     * Returns the handler registered with the given XML element qname.
+     * 
+     * @param qname
+     * @return
+     */
+    Loader getLoader(QName element);
+
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/LoaderRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,48 @@
+/*
+ * 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.assembly.xml;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Exception that indicates an element was encountered that could not be handled.
+ *
+ * @version $Rev$ $Date$
+ */
+public class UnrecognizedElementException extends LoaderException {
+    private static final long serialVersionUID = 2549543622209829032L;
+    private final QName element;
+
+    /**
+     * Constructor that indicates which element could not be handled.
+     * @param element the element that could not be handled
+     */
+    public UnrecognizedElementException(QName element) {
+        super("Unrecognized element: " + element.toString());
+        this.element = element;
+    }
+
+    /**
+     * Returns the element that could not be handled.
+     * @return the element that could not be handled.
+     */
+    public QName getElement() {
+        return element;
+    }
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/UnrecognizedElementException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,272 @@
+/*
+ * 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.assembly.xml.impl;
+
+import static javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI;
+import static javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.model.AbstractProperty;
+import org.apache.tuscany.assembly.model.AbstractReference;
+import org.apache.tuscany.assembly.model.AssemblyFactory;
+import org.apache.tuscany.assembly.model.ConstrainingType;
+import org.apache.tuscany.assembly.model.Multiplicity;
+import org.apache.tuscany.assembly.model.Property;
+import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.policy.model.Intent;
+import org.apache.tuscany.policy.model.IntentAttachPoint;
+import org.apache.tuscany.policy.model.PolicyFactory;
+import org.apache.tuscany.policy.model.PolicySet;
+import org.apache.tuscany.policy.model.PolicySetAttachPoint;
+import org.apache.tuscany.sca.idl.Operation;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * A test handler to test the usability of the assembly model API when loading
+ * SCDL
+ * 
+ * @version $Rev$ $Date$
+ */
+abstract class BaseLoader implements Constants {
+
+    private AssemblyFactory factory;
+    private PolicyFactory policyFactory;
+
+    BaseLoader() {
+    }
+
+    BaseLoader(AssemblyFactory factory, PolicyFactory policyFactory) {
+        this.factory = factory;
+        this.policyFactory = policyFactory;
+    }
+
+    protected String getString(XMLStreamReader reader, String name) {
+        return reader.getAttributeValue(null, name);
+    }
+
+    protected QName getQName(XMLStreamReader reader, String name) {
+        String qname = reader.getAttributeValue(null, name);
+        return getQNameValue(reader, qname);
+    }
+
+    /**
+     * Get the value of xsi:type attribute
+     * 
+     * @param reader The XML stream reader
+     * @return The QName of the type, if the attribute is not present, null is
+     *         returned.
+     */
+    protected QName getXSIType(XMLStreamReader reader) {
+        String qname = reader.getAttributeValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "type");
+        return getQNameValue(reader, qname);
+    }
+
+    protected QName getQNameValue(XMLStreamReader reader, String value) {
+        if (value != null) {
+            int index = value.indexOf(':');
+            String prefix = index == -1 ? "" : value.substring(0, index);
+            String localName = index == -1 ? value : value.substring(index + 1);
+            String ns = reader.getNamespaceContext().getNamespaceURI(prefix);
+            if (ns == null) {
+                ns = "";
+            }
+            return new QName(ns, localName, prefix);
+        } else {
+            return null;
+        }
+    }
+
+    protected boolean getBoolean(XMLStreamReader reader, String name) {
+        String value = reader.getAttributeValue(null, name);
+        return Boolean.valueOf(value);
+    }
+
+    protected List<QName> getQNames(XMLStreamReader reader, String name) {
+        String value = reader.getAttributeValue(null, name);
+        if (value != null) {
+            List<QName> qnames = new ArrayList<QName>();
+            for (StringTokenizer tokens = new StringTokenizer(value); tokens.hasMoreTokens();) {
+                qnames.add(getQName(reader, tokens.nextToken()));
+            }
+            return qnames;
+        } else {
+            return Collections.emptyList();
+        }
+    }
+
+    protected void readIntents(IntentAttachPoint attachPoint, XMLStreamReader reader) {
+        readIntents(attachPoint, null, reader);
+    }
+
+    protected void readIntents(IntentAttachPoint attachPoint, Operation operation, XMLStreamReader reader) {
+        String value = reader.getAttributeValue(null, Constants.REQUIRES);
+        if (value != null) {
+            List<Intent> requiredIntents = attachPoint.getRequiredIntents();
+            for (StringTokenizer tokens = new StringTokenizer(value); tokens.hasMoreTokens();) {
+                QName qname = getQNameValue(reader, tokens.nextToken());
+                Intent intent = policyFactory.createIntent();
+                intent.setName(qname);
+                if (operation != null) {
+                    intent.getOperations().add(operation);
+                }
+                requiredIntents.add(intent);
+            }
+        }
+    }
+
+    protected void readPolicies(PolicySetAttachPoint attachPoint, XMLStreamReader reader) {
+        readPolicies(attachPoint, null, reader);
+    }
+
+    protected void readMultiplicity(AbstractReference reference, XMLStreamReader reader) {
+        String value = reader.getAttributeValue(null, MULTIPLICITY);
+        if (ZERO_ONE.equals(value)) {
+            reference.setMultiplicity(Multiplicity.ZERO_ONE);
+        } else if (ONE_N.equals(value)) {
+            reference.setMultiplicity(Multiplicity.ONE_N);
+        } else if (ZERO_N.equals(value)) {
+            reference.setMultiplicity(Multiplicity.ZERO_N);
+        }
+    }
+
+    protected void readPolicies(PolicySetAttachPoint attachPoint, Operation operation, XMLStreamReader reader) {
+        readIntents(attachPoint, operation, reader);
+
+        String value = reader.getAttributeValue(null, Constants.POLICY_SETS);
+        if (value != null) {
+            List<PolicySet> policySets = attachPoint.getPolicySets();
+            for (StringTokenizer tokens = new StringTokenizer(value); tokens.hasMoreTokens();) {
+                QName qname = getQNameValue(reader, tokens.nextToken());
+                PolicySet policySet = policyFactory.createPolicySet();
+                policySet.setName(qname);
+                if (operation != null) {
+                    policySet.getOperations().add(operation);
+                }
+                policySets.add(policySet);
+            }
+        }
+    }
+
+    protected ConstrainingType getConstrainingType(XMLStreamReader reader) {
+        QName constrainingTypeName = getQName(reader, "constrainingType");
+        if (constrainingTypeName != null) {
+            ConstrainingType constrainingType = factory.createConstrainingType();
+            constrainingType.setName(constrainingTypeName);
+            constrainingType.setUnresolved(true);
+            return constrainingType;
+        } else {
+            return null;
+        }
+    }
+
+    protected void readAbstractProperty(AbstractProperty prop, XMLStreamReader reader) throws XMLStreamException {
+        prop.setName(getString(reader, "name"));
+        prop.setMany(getBoolean(reader, "many"));
+        prop.setMustSupply(getBoolean(reader, "mustSupply"));
+        prop.setXSDElement(getQName(reader, "element"));
+        prop.setXSDType(getQName(reader, "type"));
+        Node value = readPropertyValue(reader, prop.getXSDType());
+        prop.setDefaultValue(value);
+    }
+
+    protected void readProperty(Property prop, XMLStreamReader reader) throws XMLStreamException {
+        readAbstractProperty(prop, reader);
+    }
+
+    protected boolean nextChildElement(XMLStreamReader reader) throws XMLStreamException {
+        while (reader.hasNext()) {
+            int event = reader.next();
+            if (event == END_ELEMENT) {
+                return false;
+            }
+            if (event == START_ELEMENT) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Advance the stream to the next END_ELEMENT event skipping any nested
+     * content.
+     * 
+     * @param reader the reader to advance
+     * @throws XMLStreamException if there was a problem reading the stream
+     */
+    protected void skipToEndElement(XMLStreamReader reader) throws XMLStreamException {
+        int depth = 0;
+        while (reader.hasNext()) {
+            int event = reader.next();
+            if (event == XMLStreamConstants.START_ELEMENT) {
+                depth++;
+            } else if (event == XMLStreamConstants.END_ELEMENT) {
+                if (depth == 0) {
+                    return;
+                }
+                depth--;
+            }
+        }
+    }
+
+    public static Document readPropertyValue(XMLStreamReader reader, QName type)
+        throws XMLStreamException {
+        Document doc = DOMUtil.newDocument();
+
+        // root element has no namespace and local name "value"
+        Element root = doc.createElementNS(null, "value");
+        if (type != null) {
+            Attr xsi = doc.createAttributeNS(XMLNS_ATTRIBUTE_NS_URI, "xmlns:xsi");
+            xsi.setValue(W3C_XML_SCHEMA_INSTANCE_NS_URI);
+            root.setAttributeNodeNS(xsi);
+
+            String prefix = type.getPrefix();
+            if (prefix == null || prefix.length() == 0) {
+                prefix = "ns";
+            }
+
+            DOMUtil.declareNamespace(root, prefix, type.getNamespaceURI());
+
+            Attr xsiType = doc.createAttributeNS(W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi:type");
+            xsiType.setValue(prefix + ":" + type.getLocalPart());
+            root.setAttributeNodeNS(xsiType);
+        }
+        doc.appendChild(root);
+
+        DOMUtil.loadDOM(reader, root);
+        return doc;
+    }
+
+
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/BaseLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,186 @@
+/*
+ * 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.assembly.xml.impl;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.model.AssemblyFactory;
+import org.apache.tuscany.assembly.model.Binding;
+import org.apache.tuscany.assembly.model.Callback;
+import org.apache.tuscany.assembly.model.ComponentService;
+import org.apache.tuscany.assembly.model.ComponentType;
+import org.apache.tuscany.assembly.model.Contract;
+import org.apache.tuscany.assembly.model.Property;
+import org.apache.tuscany.assembly.model.Reference;
+import org.apache.tuscany.assembly.model.Service;
+import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.assembly.xml.Loader;
+import org.apache.tuscany.assembly.xml.LoaderRegistry;
+import org.apache.tuscany.policy.model.PolicyFactory;
+import org.apache.tuscany.sca.idl.Interface;
+import org.apache.tuscany.sca.idl.Operation;
+
+/**
+ * A componentType loader.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ComponentTypeLoader extends BaseLoader implements Loader<ComponentType> {
+    private AssemblyFactory factory;
+    private LoaderRegistry registry;
+
+    /**
+     * Constructs a new componentType loader.
+     * 
+     * @param factory
+     * @param policyFactory
+     * @param registry
+     */
+    public ComponentTypeLoader(AssemblyFactory factory, PolicyFactory policyFactory, LoaderRegistry registry) {
+        super(factory, policyFactory);
+        this.factory = factory;
+        this.registry = registry;
+    }
+
+    public ComponentType load(XMLStreamReader reader) throws XMLStreamException {
+        ComponentType componentType = null;
+        Service service = null;
+        Reference reference = null;
+        Contract contract = null;
+        Property property = null;
+        Callback callback = null;
+        QName name = null;
+
+        // Read the componentType document
+        while (reader.hasNext()) {
+            int event = reader.getEventType();
+            switch (event) {
+                case START_ELEMENT:
+                    name = reader.getName();
+
+                    if (Constants.COMPONENT_TYPE_QNAME.equals(name)) {
+
+                        // Read a <componentType>
+                        componentType = factory.createComponentType();
+                        componentType.setConstrainingType(getConstrainingType(reader));
+                        readPolicies(componentType, reader);
+
+                    } else if (Constants.SERVICE_QNAME.equals(name)) {
+
+                        // Read a <service>
+                        service = factory.createService();
+                        contract = service;
+                        service.setName(getString(reader, Constants.NAME));
+                        componentType.getServices().add(service);
+                        readPolicies(service, reader);
+
+                    } else if (Constants.REFERENCE_QNAME.equals(name)) {
+
+                        // Read a <reference>
+                        reference = factory.createReference();
+                        contract = reference;
+                        reference.setName(getString(reader, Constants.NAME));
+                        readMultiplicity(reference, reader);
+
+                        // TODO support multivalued attribute
+                        ComponentService target = factory.createComponentService();
+                        target.setUnresolved(true);
+                        target.setName(getString(reader, Constants.TARGET));
+                        reference.getTargets().add(target);
+
+                        componentType.getReferences().add(reference);
+                        readPolicies(reference, reader);
+
+                    } else if (Constants.PROPERTY_QNAME.equals(name)) {
+
+                        // Read a <property>
+                        property = factory.createProperty();
+                        readProperty(property, reader);
+                        componentType.getProperties().add(property);
+                        readPolicies(property, reader);
+
+                    } else if (Constants.CALLBACK_QNAME.equals(name)) {
+
+                        // Read a <callback>
+                        callback = factory.createCallback();
+                        contract.setCallback(callback);
+                        readPolicies(callback, reader);
+
+                    } else if (OPERATION.equals(name)) {
+
+                        // Read an <operation>
+                        Operation operation = factory.createOperation();
+                        operation.setName(getString(reader, NAME));
+                        operation.setUnresolved(true);
+                        if (callback != null) {
+                            readPolicies(callback, operation, reader);
+                        } else {
+                            readPolicies(contract, operation, reader);
+                        }
+                    } else {
+
+                        // Read an extension element
+                        Object extension = registry.load(reader);
+                        if (extension != null) {
+                            if (extension instanceof Interface) {
+
+                                // <service><interface> and <reference><interface>
+                                contract.setInterface((Interface)extension);
+
+                            } else if (extension instanceof Binding) {
+
+                                // <service><binding> and <reference><binding>
+                                contract.getBindings().add((Binding)extension);
+                            }
+                        }
+                    }
+                    break;
+
+                case END_ELEMENT:
+                    name = reader.getName();
+
+                    // Clear current state when reading reaching end element
+                    if (SERVICE_QNAME.equals(name)) {
+                        service = null;
+                        contract = null;
+                    } else if (REFERENCE_QNAME.equals(name)) {
+                        reference = null;
+                        contract = null;
+                    } else if (PROPERTY_QNAME.equals(name)) {
+                        property = null;
+                    } else if (CALLBACK_QNAME.equals(name)) {
+                        callback = null;
+                    }
+                    break;
+            }
+            
+            // Read the next element
+            if (reader.hasNext()) {
+                reader.next();
+            }
+        }
+        return componentType;
+    }
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ComponentTypeLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,301 @@
+/*
+ * 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.assembly.xml.impl;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.model.AssemblyFactory;
+import org.apache.tuscany.assembly.model.Binding;
+import org.apache.tuscany.assembly.model.Callback;
+import org.apache.tuscany.assembly.model.Component;
+import org.apache.tuscany.assembly.model.ComponentProperty;
+import org.apache.tuscany.assembly.model.ComponentReference;
+import org.apache.tuscany.assembly.model.ComponentService;
+import org.apache.tuscany.assembly.model.Composite;
+import org.apache.tuscany.assembly.model.CompositeReference;
+import org.apache.tuscany.assembly.model.CompositeService;
+import org.apache.tuscany.assembly.model.Contract;
+import org.apache.tuscany.assembly.model.Implementation;
+import org.apache.tuscany.assembly.model.Property;
+import org.apache.tuscany.assembly.model.Wire;
+import org.apache.tuscany.assembly.xml.Loader;
+import org.apache.tuscany.assembly.xml.LoaderRegistry;
+import org.apache.tuscany.policy.model.PolicyFactory;
+import org.apache.tuscany.sca.idl.Interface;
+import org.apache.tuscany.sca.idl.Operation;
+
+/**
+ * A composite content handler.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class CompositeLoader extends BaseLoader implements Loader<Composite> {
+    private AssemblyFactory factory;
+    private LoaderRegistry registry;
+
+    /**
+     * Construct a new composite loader
+     * 
+     * @param assemblyFactory
+     * @param policyFactory
+     * @param registry
+     */
+    public CompositeLoader(AssemblyFactory factory, PolicyFactory policyFactory, LoaderRegistry registry) {
+        super(factory, policyFactory);
+        this.factory = factory;
+        this.registry = registry;
+    }
+
+    public Composite load(XMLStreamReader reader) throws XMLStreamException {
+        Composite composite = null;
+        Composite include = null;
+        Component component = null;
+        Property property = null;
+        ComponentService componentService = null;
+        ComponentReference componentReference = null;
+        ComponentProperty componentProperty = null;
+        CompositeService compositeService = null;
+        CompositeReference compositeReference = null;
+        Contract contract = null;
+        Wire wire = null;
+        Callback callback = null;
+        QName name = null;
+
+        // Read the composite document
+        while (reader.hasNext()) {
+            int event = reader.getEventType();
+            switch (event) {
+                case START_ELEMENT:
+                    name = reader.getName();
+
+                    if (COMPOSITE_QNAME.equals(name)) {
+
+                        // Read a <composite>
+                        composite = factory.createComposite();
+                        composite.setName(getQName(reader, NAME));
+                        composite.setAutowire(getBoolean(reader, AUTOWIRE));
+                        composite.setLocal(getBoolean(reader, LOCAL));
+                        composite.setConstrainingType(getConstrainingType(reader));
+                        readPolicies(composite, reader);
+
+                    } else if (INCLUDE_QNAME.equals(name)) {
+
+                        // Read an <include>
+                        include = factory.createComposite();
+                        include.setUnresolved(true);
+                        composite.getIncludes().add(include);
+
+                    } else if (SERVICE_QNAME.equals(name)) {
+                        if (component != null) {
+
+                            // Read a <component><service>
+                            componentService = factory.createComponentService();
+                            contract = componentService;
+                            componentService.setName(getString(reader, NAME));
+                            component.getServices().add(componentService);
+                            readPolicies(contract, reader);
+                        } else {
+
+                            // Read a <composite><service>
+                            compositeService = factory.createCompositeService();
+                            contract = compositeService;
+                            compositeService.setName(getString(reader, NAME));
+
+                            ComponentService promoted = factory.createComponentService();
+                            promoted.setUnresolved(true);
+                            promoted.setName(getString(reader, PROMOTE));
+                            compositeService.setPromotedService(promoted);
+
+                            composite.getServices().add(compositeService);
+                            readPolicies(contract, reader);
+                        }
+
+                    } else if (REFERENCE_QNAME.equals(name)) {
+                        if (component != null) {
+
+                            // Read a <component><reference>
+                            componentReference = factory.createComponentReference();
+                            contract = componentReference;
+                            componentReference.setName(getString(reader, NAME));
+                            readMultiplicity(componentReference, reader);
+
+                            // TODO support multivalued attribute
+                            ComponentService target = factory.createComponentService();
+                            target.setUnresolved(true);
+                            target.setName(getString(reader, TARGET));
+                            componentReference.getTargets().add(target);
+
+                            component.getReferences().add(componentReference);
+                            readPolicies(contract, reader);
+                        } else {
+
+                            // Read a <composite><reference>
+                            compositeReference = factory.createCompositeReference();
+                            contract = compositeReference;
+                            compositeReference.setName(getString(reader, NAME));
+                            readMultiplicity(compositeReference, reader);
+
+                            // TODO support multivalued attribute
+                            ComponentReference promoted = factory.createComponentReference();
+                            promoted.setUnresolved(true);
+                            promoted.setName(getString(reader, PROMOTE));
+                            compositeReference.getPromotedReferences().add(promoted);
+
+                            composite.getReferences().add(compositeReference);
+                            readPolicies(contract, reader);
+                        }
+
+                    } else if (PROPERTY_QNAME.equals(name)) {
+                        if (component != null) {
+
+                            // Read a <component><property>
+                            componentProperty = factory.createComponentProperty();
+                            property = componentProperty;
+                            readPolicies(property, reader);
+                            readProperty(componentProperty, reader);
+                            component.getProperties().add(componentProperty);
+                        } else {
+
+                            // Read a <composite><property>
+                            property = factory.createProperty();
+                            readPolicies(property, reader);
+                            readProperty(property, reader);
+                            composite.getProperties().add(property);
+                        }
+
+                    } else if (COMPONENT_QNAME.equals(name)) {
+
+                        // Read a <component>
+                        component = factory.createComponent();
+                        component.setName(getString(reader, NAME));
+                        component.setConstrainingType(getConstrainingType(reader));
+                        composite.getComponents().add(component);
+                        readPolicies(component, reader);
+
+                    } else if (WIRE_QNAME.equals(name)) {
+
+                        // Read a <wire>
+                        wire = factory.createWire();
+                        ComponentReference source = factory.createComponentReference();
+                        source.setUnresolved(true);
+                        source.setName(getString(reader, SOURCE));
+                        wire.setSource(source);
+
+                        ComponentService target = factory.createComponentService();
+                        target.setUnresolved(true);
+                        target.setName(getString(reader, TARGET));
+                        wire.setTarget(target);
+
+                        composite.getWires().add(wire);
+                        readPolicies(wire, reader);
+
+                    } else if (CALLBACK_QNAME.equals(name)) {
+
+                        // Read a <callback>
+                        callback = factory.createCallback();
+                        contract.setCallback(callback);
+                        readPolicies(callback, reader);
+
+                    } else if (OPERATION.equals(name)) {
+
+                        // Read an <operation>
+                        Operation operation = factory.createOperation();
+                        operation.setName(getString(reader, NAME));
+                        operation.setUnresolved(true);
+                        if (callback != null) {
+                            readPolicies(callback, operation, reader);
+                        } else {
+                            readPolicies(contract, operation, reader);
+                        }
+                    } else {
+
+                        // Read an extension element
+                        Object extension = registry.load(reader);
+                        if (extension != null) {
+                            if (extension instanceof Interface) {
+
+                                // <service><interface> and
+                                // <reference><interface>
+                                contract.setInterface((Interface)extension);
+
+                            } else if (extension instanceof Binding) {
+                                // <service><binding> and <reference><binding>
+                                contract.getBindings().add((Binding)extension);
+
+                            } else if (extension instanceof Implementation) {
+
+                                // <component><implementation>
+                                component.setImplementation((Implementation)extension);
+                            }
+                        }
+                    }
+                    break;
+
+                case XMLStreamConstants.CHARACTERS:
+
+                    // Read an <include>qname</include>
+                    if (include != null && INCLUDE_QNAME.equals(name)) {
+                        include.setName(getQNameValue(reader, reader.getText().trim()));
+                    }
+
+                    break;
+
+                case END_ELEMENT:
+                    name = reader.getName();
+
+                    // Clear current state when reading reaching end element
+                    if (SERVICE_QNAME.equals(name)) {
+                        componentService = null;
+                        compositeService = null;
+                        contract = null;
+                    } else if (INCLUDE_QNAME.equals(name)) {
+                        include = null;
+                    } else if (REFERENCE_QNAME.equals(name)) {
+                        componentReference = null;
+                        compositeReference = null;
+                        contract = null;
+                    } else if (PROPERTY_QNAME.equals(name)) {
+                        componentProperty = null;
+                        property = null;
+                    } else if (COMPONENT_QNAME.equals(name)) {
+                        component = null;
+                    } else if (WIRE_QNAME.equals(name)) {
+                        wire = null;
+                    } else if (CALLBACK_QNAME.equals(name)) {
+                        callback = null;
+                    }
+                    break;
+            }
+
+            // Read the next element
+            if (reader.hasNext()) {
+                reader.next();
+            }
+        }
+        return composite;
+    }
+
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/CompositeLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,154 @@
+/*
+ * 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.assembly.xml.impl;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.model.AbstractContract;
+import org.apache.tuscany.assembly.model.AbstractProperty;
+import org.apache.tuscany.assembly.model.AbstractReference;
+import org.apache.tuscany.assembly.model.AbstractService;
+import org.apache.tuscany.assembly.model.AssemblyFactory;
+import org.apache.tuscany.assembly.model.ConstrainingType;
+import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.assembly.xml.Loader;
+import org.apache.tuscany.assembly.xml.LoaderRegistry;
+import org.apache.tuscany.policy.model.PolicyFactory;
+import org.apache.tuscany.sca.idl.Interface;
+import org.apache.tuscany.sca.idl.Operation;
+
+/**
+ * A contrainingType content handler.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ConstrainingTypeLoader extends BaseLoader implements Loader<ConstrainingType> {
+    private AssemblyFactory factory;
+    private LoaderRegistry registry;
+
+    /**
+     * Construct a new constrainingType loader.
+     * @param factory
+     * @param policyFactory
+     * @param registry
+     */
+    public ConstrainingTypeLoader(AssemblyFactory factory, PolicyFactory policyFactory, LoaderRegistry registry) {
+        super(factory, policyFactory);
+        this.factory = factory;
+        this.registry = registry;
+    }
+
+    public ConstrainingType load(XMLStreamReader reader) throws XMLStreamException {
+        ConstrainingType constrainingType = null;
+        AbstractService abstractService = null;
+        AbstractReference abstractReference = null;
+        AbstractProperty abstractProperty = null;
+        AbstractContract abstractContract = null;
+        QName name = null;
+        
+        // Read the constrainingType document
+        while (reader.hasNext()) {
+            int event = reader.getEventType();
+            switch (event) {
+
+                case START_ELEMENT:
+                    name = reader.getName();
+                    
+                    // Read a <constrainingType>
+                    if (Constants.CONSTRAINING_TYPE_QNAME.equals(name)) {
+                        constrainingType = factory.createConstrainingType();
+                        constrainingType.setName(getQName(reader, Constants.NAME));
+                        readIntents(constrainingType, reader);
+
+                    } else if (Constants.SERVICE_QNAME.equals(name)) {
+                        
+                        // Read a <service>
+                        abstractService = factory.createAbstractService();
+                        abstractContract = abstractService;
+                        abstractService.setName(getString(reader, Constants.NAME));
+                        constrainingType.getServices().add(abstractService);
+                        readIntents(abstractService, reader);
+
+                    } else if (Constants.REFERENCE_QNAME.equals(name)) {
+                        
+                        // Read a <reference>
+                        abstractReference = factory.createAbstractReference();
+                        abstractContract = abstractReference;
+                        abstractReference.setName(getString(reader, Constants.NAME));
+                        readMultiplicity(abstractReference, reader);
+                        constrainingType.getReferences().add(abstractReference);
+                        readIntents(abstractReference, reader);
+
+                    } else if (Constants.PROPERTY_QNAME.equals(name)) {
+                        
+                        // Read a <property>
+                        abstractProperty = factory.createAbstractProperty();
+                        readAbstractProperty(abstractProperty, reader);
+                        constrainingType.getProperties().add(abstractProperty);
+                        readIntents(abstractProperty, reader);
+                        
+                    } else if (OPERATION.equals(name)) {
+
+                        // Read an <operation>
+                        Operation operation = factory.createOperation();
+                        operation.setName(getString(reader, NAME));
+                        operation.setUnresolved(true);
+                        readIntents(abstractContract, operation, reader);
+                        
+                    } else {
+
+                        // Read an extension element
+                        Object extension = registry.load(reader);
+                        if (extension instanceof Interface) {
+                            // <service><interface> and <reference><interface>
+                            abstractContract.setInterface((Interface)extension);
+                        }
+                    }
+                    break;
+
+                case END_ELEMENT:
+                    name = reader.getName();
+
+                    // Clear current state when reading reaching end element
+                    if (SERVICE_QNAME.equals(name)) {
+                        abstractService = null;
+                        abstractContract = null;
+                    } else if (REFERENCE_QNAME.equals(name)) {
+                        abstractReference = null;
+                        abstractContract = null;
+                    } else if (PROPERTY_QNAME.equals(name)) {
+                        abstractProperty = null;
+                    }
+                    break;
+            }
+            if (reader.hasNext()) {
+                reader.next();
+            }
+        }
+        return constrainingType;
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/ConstrainingTypeLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,169 @@
+/*
+ * 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.assembly.xml.impl;
+
+import static javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.xml.LoaderException;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public final class DOMUtil {
+    private static final DocumentBuilderFactory FACTORY = DocumentBuilderFactory.newInstance();
+    static {
+        FACTORY.setNamespaceAware(true);
+    }
+
+    private DOMUtil() {
+    }
+
+    public static Document newDocument() {
+        try {
+            return newDocumentBuilder().newDocument();
+        } catch (ParserConfigurationException e) {
+            throw new LoaderException(e);
+        }
+    }
+
+    public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
+        return FACTORY.newDocumentBuilder();
+    }
+
+    public static QName getQName(Node node) {
+        String ns = node.getNamespaceURI();
+        if (ns == null) {
+            ns = "";
+        }
+        // node.getLocalName() will return null if it is created using DOM Level
+        // 1 method
+        // such as createElement()
+        return new QName(ns, node.getNodeName());
+    }
+
+    public static Element createElement(Document document, QName name) {
+        String prefix = name.getPrefix();
+        String qname = (prefix != null && prefix.length() > 0) ? prefix + ":" + name.getLocalPart() : name
+            .getLocalPart();
+        return document.createElementNS(name.getNamespaceURI(), qname);
+    }
+
+    public static void declareNamespace(Element element, String prefix, String ns) {
+        String qname = null;
+        if ("".equals(prefix)) {
+            qname = "xmlns";
+        } else {
+            qname = "xmlns:" + prefix;
+        }
+        Node node = element;
+        boolean declared = false;
+        while (node != null && node.getNodeType() == Node.ELEMENT_NODE) {
+            NamedNodeMap attrs = node.getAttributes();
+            if (attrs == null) {
+                break;
+            }
+            Node attr = attrs.getNamedItem(qname);
+            if (attr != null) {
+                declared = ns.equals(attr.getNodeValue());
+                break;
+            }
+            node = node.getParentNode();
+        }
+        if (!declared) {
+            Attr attr = element.getOwnerDocument().createAttributeNS(XMLNS_ATTRIBUTE_NS_URI, qname);
+            attr.setValue(ns);
+            element.setAttributeNodeNS(attr);
+        }
+    }
+
+    /**
+     * Load a property value specification from an StAX stream into a DOM
+     * Document. Only elements, text and attributes are processed; all comments
+     * and other whitespace are ignored.
+     * 
+     * @param reader the stream to read from
+     * @param root the DOM node to load
+     * @throws javax.xml.stream.XMLStreamException
+     */
+    public static void loadDOM(XMLStreamReader reader, Node root) throws XMLStreamException {
+        Document document = root.getOwnerDocument();
+        Node current = root;
+        while (true) {
+            switch (reader.next()) {
+                case XMLStreamConstants.START_ELEMENT:
+                    QName name = reader.getName();
+                    Element child = createElement(document, name);
+
+                    // push the new element and make it the current one
+                    current.appendChild(child);
+                    current = child;
+
+                    declareNamespace(child, name.getPrefix(), name.getNamespaceURI());
+
+                    int count = reader.getNamespaceCount();
+                    for (int i = 0; i < count; i++) {
+                        String prefix = reader.getNamespacePrefix(i);
+                        String ns = reader.getNamespaceURI(i);
+                        declareNamespace(child, prefix, ns);
+                    }
+
+                    // add the attributes for this element
+                    count = reader.getAttributeCount();
+                    for (int i = 0; i < count; i++) {
+                        String ns = reader.getAttributeNamespace(i);
+                        String prefix = reader.getAttributePrefix(i);
+                        String localPart = reader.getAttributeLocalName(i);
+                        String value = reader.getAttributeValue(i);
+                        child.setAttributeNS(ns, localPart, value);
+                        declareNamespace(child, prefix, ns);
+                    }
+
+                    break;
+                case XMLStreamConstants.CDATA:
+                    current.appendChild(document.createCDATASection(reader.getText()));
+                    break;
+                case XMLStreamConstants.CHARACTERS:
+                    current.appendChild(document.createTextNode(reader.getText()));
+                    break;
+                case XMLStreamConstants.END_ELEMENT:
+                    // if we are back at the root then we are done
+                    if (current == root) {
+                        return;
+                    }
+
+                    // pop the element off the stack
+                    current = current.getParentNode();
+            }
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/DOMUtil.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java?view=auto&rev=525085
==============================================================================
--- incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java (added)
+++ incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java Tue Apr  3 01:34:51 2007
@@ -0,0 +1,157 @@
+/*
+ * 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.assembly.xml.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.assembly.model.AssemblyFactory;
+import org.apache.tuscany.assembly.model.impl.DefaultAssemblyFactory;
+import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.assembly.xml.InvalidConfigurationException;
+import org.apache.tuscany.assembly.xml.Loader;
+import org.apache.tuscany.assembly.xml.LoaderException;
+import org.apache.tuscany.assembly.xml.LoaderRegistry;
+import org.apache.tuscany.assembly.xml.UnrecognizedElementException;
+import org.apache.tuscany.policy.model.PolicyFactory;
+import org.apache.tuscany.policy.model.impl.DefaultPolicyFactory;
+
+/**
+ * The default implementation of a loader registry
+ * 
+ * @version $Rev$ $Date$
+ */
+public class LoaderRegistryImpl implements LoaderRegistry {
+    private final Map<QName, Loader> loaders = new HashMap<QName, Loader>();
+
+    private AssemblyFactory assemblyFactory;
+    private PolicyFactory policyFactory;
+    private XMLInputFactory factory;
+
+    /**
+     * Constructs a new loader registry.
+     * @param assemblyFactory
+     * @param policyFactory
+     * @param factory
+     */
+    public LoaderRegistryImpl(AssemblyFactory assemblyFactory, PolicyFactory policyFactory, XMLInputFactory factory) {
+        super();
+        this.assemblyFactory = assemblyFactory;
+        this.policyFactory = policyFactory;
+        this.factory = factory;
+        init();
+    }
+
+    public LoaderRegistryImpl() {
+        this(new DefaultAssemblyFactory(), new DefaultPolicyFactory(), XMLInputFactory.newInstance());
+    }
+
+    public final void init() {
+        addLoader(Constants.COMPOSITE_QNAME, new CompositeLoader(assemblyFactory, policyFactory, this));
+        addLoader(Constants.COMPONENT_TYPE_QNAME, new ComponentTypeLoader(assemblyFactory, policyFactory, this));
+        addLoader(Constants.CONSTRAINING_TYPE_QNAME, new ConstrainingTypeLoader(assemblyFactory, policyFactory, this));
+    }
+
+    public Object load(XMLStreamReader reader) throws XMLStreamException {
+        QName name = reader.getName();
+        Loader loader = loaders.get(name);
+        if (loader == null) {
+            return null;
+        }
+        return loader.load(reader);
+    }
+
+    public <MO> MO load(URL url, Class<MO> type) throws LoaderException {
+        try {
+            XMLStreamReader reader;
+            InputStream is;
+            is = url.openStream();
+            try {
+                reader = factory.createXMLStreamReader(is);
+                try {
+                    reader.nextTag();
+                    QName name = reader.getName();
+                    Object mo = load(reader);
+                    if (type.isInstance(mo)) {
+                        return type.cast(mo);
+                    } else {
+                        UnrecognizedElementException e = new UnrecognizedElementException(name);
+                        e.setResourceURI(url.toString());
+                        throw e;
+                    }
+                } catch (LoaderException e) {
+                    Location location = reader.getLocation();
+                    e.setLine(location.getLineNumber());
+                    e.setColumn(location.getColumnNumber());
+                    throw e;
+                } finally {
+                    try {
+                        reader.close();
+                    } catch (XMLStreamException e) {
+                        // ignore
+                    }
+                }
+            } finally {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+        } catch (IOException e) {
+            LoaderException sfe = new LoaderException(e);
+            sfe.setResourceURI(url.toString());
+            throw sfe;
+        } catch (XMLStreamException e) {
+            throw new InvalidConfigurationException("Invalid or missing resource: " + url.toString(), e);
+        }
+    }
+
+    public final void addLoader(QName element, Loader loader) {
+        loaders.put(element, loader);
+    }
+
+    public Loader getLoader(QName element) {
+        return loaders.get(element);
+    }
+
+    /**
+     * @return the assemblyFactory
+     */
+    public AssemblyFactory getAssemblyFactory() {
+        return assemblyFactory;
+    }
+
+    /**
+     * @return the policyFactory
+     */
+    public PolicyFactory getPolicyFactory() {
+        return policyFactory;
+    }
+
+}

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/scdl4j/assembly-xml/src/main/java/org/apache/tuscany/assembly/xml/impl/LoaderRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org