Author: jsdelfino
Date: Sun Sep 28 18:16:27 2008
New Revision: 699943

URL: http://svn.apache.org/viewvc?rev=699943&view=rev
Log:
Merged from trunk. TUSCANY-2538 - Moving Default element processor to 
contribution-xml and various other minor fixes.

Added:
    
tuscany/branches/sca-equinox/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java
    
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/
    
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/
    
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java
    
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java
Removed:
    
tuscany/branches/sca-equinox/modules/contribution/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessorExtensionPoint
Modified:
    
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
    
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXArtifactProcessor.java
    
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java
    
tuscany/branches/sca-equinox/modules/contribution/src/main/resources/contribution-validation-messages.properties

Added: 
tuscany/branches/sca-equinox/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java?rev=699943&view=auto
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java
 (added)
+++ 
tuscany/branches/sca-equinox/modules/assembly-xml/src/test/java/org/apache/tuscany/sca/assembly/xml/AnyElementReadWriteTestCase.java
 Sun Sep 28 18:16:27 2008
@@ -0,0 +1,71 @@
+/*
+ * 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.assembly.xml;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import 
org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+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>";
+       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 {
+           }
+               
+       @Test
+       public void testReadWriteComposite() throws Exception{
+               InputStream is = 
getClass().getResourceAsStream("Calculator.composite");
+               XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+               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());
+               bos.close();
+        
+        is.close();
+       }
+
+}

Added: 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java?rev=699943&view=auto
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java
 (added)
+++ 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyAttributeProcessor.java
 Sun Sep 28 18:16:27 2008
@@ -0,0 +1,68 @@
+/*
+ * 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.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import 
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+/**
+ * A Policy Processor used for testing.
+ *
+ * @version $Rev$ $Date$
+ */
+public class AnyAttributeProcessor extends BaseStAXArtifactProcessor 
implements StAXAttributeProcessor<String> {
+       private static final QName ANY_ATTRIBUTE = new 
QName("http://www.w3.org/2001/XMLSchema";, "anyAttribute");
+       
+       public AnyAttributeProcessor(ModelFactoryExtensionPoint modelFactories, 
Monitor monitor) {
+               
+       }
+       
+    public QName getArtifactType() {
+        return ANY_ATTRIBUTE;
+    }
+
+    public Class<String> getModelType() {
+        return String.class;
+    }
+
+    public String read(QName attributeName, XMLStreamReader reader) throws 
ContributionReadException, XMLStreamException {
+        return reader.getAttributeValue(attributeName.getNamespaceURI(), 
attributeName.getLocalPart());
+    }
+
+    public void write(String value, XMLStreamWriter writer) throws 
ContributionWriteException, XMLStreamException {
+       writer.setPrefix(ANY_ATTRIBUTE.getPrefix(), 
ANY_ATTRIBUTE.getNamespaceURI());
+       writer.writeAttribute(ANY_ATTRIBUTE.getLocalPart(), value);
+    } 
+
+
+    public void resolve(String arg0, ModelResolver arg1) throws 
ContributionResolveException {
+       
+    }
+}

Added: 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java?rev=699943&view=auto
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java
 (added)
+++ 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/processor/xml/AnyElementProcessor.java
 Sun Sep 28 18:16:27 2008
@@ -0,0 +1,310 @@
+/*
+ * 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 static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+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;
+
+public class AnyElementProcessor implements StAXArtifactProcessor<Object> {
+       private static final QName ANY_ELEMENT = new 
QName("http://www.w3.org/2001/XMLSchema";, "anyElement");
+       
+       private static final Logger logger = 
Logger.getLogger(AnyElementProcessor.class.getName());
+       private DocumentBuilderFactory documentBuilderFactory;
+       private Document document;
+       private Monitor monitor;
+       
+       public AnyElementProcessor(ModelFactoryExtensionPoint modelFactories, 
Monitor monitor) {
+               documentBuilderFactory = 
modelFactories.getFactory(DocumentBuilderFactory.class);
+               this.monitor = monitor;
+       }
+       
+
+    public QName getArtifactType() {
+        return ANY_ELEMENT;
+    }
+
+    public Class<Object> getModelType() {
+        return Object.class;
+    }
+    
+       /**
+        * Reads the contetns of the unknown elements and generates the DOM     
+        * @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;
+       }
+
+       /**
+        * Writes unknown portions back to the writer
+        * @param model
+        * @param writer
+        */
+       public void write(Object model, XMLStreamWriter writer) {
+               
+               if( ! (model instanceof Document)) {
+                       return;
+               }
+               
+               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;
+            }
+                       
+                       Element element = 
document.createElementNS(reader.getNamespaceURI(), eleQName);
+                               
+                       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);
+                               }
+                       }
+                       else{
+                               Node parentNode = 
getParentNode(document,parent);
+                               if(parentNode != null){
+                                       parentNode.appendChild(element);
+                               }
+                               else{
+                                       if (logger.isLoggable(Level.SEVERE)) {
+                                               logger.log(Level.SEVERE, 
"Parent node not found");
+                                       }
+                                       error("Parent node not 
found",document,parentNode.getNodeName());
+                               }
+                       }
+               }
+               catch(Exception e){
+                       e.printStackTrace();
+                       if (logger.isLoggable(Level.SEVERE)) {
+                logger.log(Level.SEVERE, "Document not created ");
+            }
+                       error("Document not created",document,e);
+               }
+       }
+
+       /**
+        * 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
+        * @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;
+               }
+               catch(Exception e){
+                       e.printStackTrace();
+               }
+               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);
+       }
+    }
+       
+}

Modified: 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor?rev=699943&r1=699942&r2=699943&view=diff
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
 (original)
+++ 
tuscany/branches/sca-equinox/modules/contribution-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
 Sun Sep 28 18:16:27 2008
@@ -17,3 +17,4 @@
 
 # Implementation class for the artifact processor extension
 
org.apache.tuscany.sca.contribution.xml.ContributionMetadataProcessor;qname=http://www.osoa.org/xmlns/sca/1.0#contribution,model=org.apache.tuscany.sca.contribution.ContributionMetadata
+org.apache.tuscany.sca.contribution.processor.xml.AnyElementProcessor;qname=http://www.w3.org/2001/XMLSchema#anyElement,model=java.lang.Object

Modified: 
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXArtifactProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXArtifactProcessor.java?rev=699943&r1=699942&r2=699943&view=diff
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXArtifactProcessor.java
 (original)
+++ 
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXArtifactProcessor.java
 Sun Sep 28 18:16:27 2008
@@ -34,6 +34,7 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl;
+import org.apache.tuscany.sca.contribution.Constants;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.contribution.service.ContributionReadException;
 import 
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
@@ -51,10 +52,11 @@
  * 
  * @version $Rev$ $Date$
  */
-public class ExtensibleStAXArtifactProcessor
-    implements StAXArtifactProcessor<Object> {
-
+public class ExtensibleStAXArtifactProcessor implements 
StAXArtifactProcessor<Object> {
     private static final Logger logger = 
Logger.getLogger(ExtensibleStAXArtifactProcessor.class.getName()); 
+       
+    private static final QName ANY_ELEMENT = new 
QName("http://www.w3.org/2001/XMLSchema";, "anyElement");
+
     private XMLInputFactory inputFactory;
     private XMLOutputFactory outputFactory;
     private StAXArtifactProcessorExtensionPoint processors;
@@ -138,7 +140,13 @@
                 logger.warning("Element " + name + " cannot be processed. (" + 
location + ")");
             }
             warning("ElementCannotBeProcessed", processors, name, location);
-            return null;
+            
+            StAXArtifactProcessor<?> anyElementProcessor = 
processors.getProcessor(ANY_ELEMENT);
+            if (anyElementProcessor != null) {
+                return anyElementProcessor.read(source);
+            } else {
+                return null;
+            }
         }
         return processor.read(source);
     }
@@ -156,6 +164,11 @@
                     logger.warning("No StAX processor is configured to handle 
" + model.getClass());
                 }
                 warning("NoStaxProcessor", processors, model.getClass());
+                
+                StAXArtifactProcessor anyElementProcessor = 
processors.getProcessor(ANY_ELEMENT);
+                if (anyElementProcessor != null) {
+                    anyElementProcessor.write(model, outputSource);
+                }
             }
         }
     }

Modified: 
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java?rev=699943&r1=699942&r2=699943&view=diff
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java
 (original)
+++ 
tuscany/branches/sca-equinox/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ExtensibleStAXAttributeProcessor.java
 Sun Sep 28 18:16:27 2008
@@ -147,6 +147,17 @@
                return processor.read(attributeName, source);
         }
         
+        
+        //handle extension attributes without processors
+        processor = 
(StAXAttributeProcessor<?>)processors.getProcessor(UNKNOWN_ATTRIBUTE);
+        if (processor == null) {
+               Location location = source.getLocation();
+            if (logger.isLoggable(Level.WARNING)) {                
+                logger.warning("Could not find Default Attribute processor !");
+            }
+            warning("DefaultAttributeProcessorNotAvailable", processors, 
UNKNOWN_ATTRIBUTE, location);            
+        }              
+        
         return processor == null ? null : processor.read(attributeName, 
source);
     }
     
@@ -168,6 +179,18 @@
                processor.write(model, outputSource);
                return;
        }
+       
+        //handle extension attributes without processors
+        processor = 
(StAXAttributeProcessor<?>)processors.getProcessor(UNKNOWN_ATTRIBUTE);
+        if(processor == null) {
+               if (logger.isLoggable(Level.WARNING)) {
+                       logger.warning("No Default StAX processor is configured 
to handle " + model.getClass());
+               }
+               warning("NoDefaultStaxProcessor", processors, 
model.getClass());                                
+        } else {
+               processor.write(model, outputSource);
+               return;         
+        }
     }
     
     

Modified: 
tuscany/branches/sca-equinox/modules/contribution/src/main/resources/contribution-validation-messages.properties
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-equinox/modules/contribution/src/main/resources/contribution-validation-messages.properties?rev=699943&r1=699942&r2=699943&view=diff
==============================================================================
--- 
tuscany/branches/sca-equinox/modules/contribution/src/main/resources/contribution-validation-messages.properties
 (original)
+++ 
tuscany/branches/sca-equinox/modules/contribution/src/main/resources/contribution-validation-messages.properties
 Sun Sep 28 18:16:27 2008
@@ -23,9 +23,12 @@
 SchemaWarning = XMLSchema validation warning occured in: {0} ,line = {1}, 
column = {2}, Message = {3}
 UnsupportedPackageTypeException = Unsupported contribution package type: {0}
 ElementCannotBeProcessed = Element {0} cannot be processed. ({1})
+AttributeCannotBeProcessed = Attribute {0} cannot be processed. ({1})
 NoStaxProcessor = No StAX processor is configured to handle {0}
 ContributionWriteException = ContributionWriteException occured due to :
 ContributionReadException = ContributionReadException occured due to :
 UnrecognizedElementException = Unrecognized Element : {0}
 IllegalArgumentException = Invalid qname: {0}
 PrivilegedActionException = PrivilegedActionException occured due to : 
+AttributeCannotBeProcessed = Attribute {0} cannot be processed. ({1})
+


Reply via email to