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})
+