diff options
Diffstat (limited to '')
-rw-r--r-- | branches/sca-java-1.x/modules/binding-http-oasis/src/main/java/org/apache/tuscany/sca/binding/http/xml/HTTPBindingProcessor.java | 71 |
1 files changed, 60 insertions, 11 deletions
diff --git a/branches/sca-java-1.x/modules/binding-http-oasis/src/main/java/org/apache/tuscany/sca/binding/http/xml/HTTPBindingProcessor.java b/branches/sca-java-1.x/modules/binding-http-oasis/src/main/java/org/apache/tuscany/sca/binding/http/xml/HTTPBindingProcessor.java index f5b32a8ea0..b7b0df38db 100644 --- a/branches/sca-java-1.x/modules/binding-http-oasis/src/main/java/org/apache/tuscany/sca/binding/http/xml/HTTPBindingProcessor.java +++ b/branches/sca-java-1.x/modules/binding-http-oasis/src/main/java/org/apache/tuscany/sca/binding/http/xml/HTTPBindingProcessor.java @@ -19,11 +19,16 @@ package org.apache.tuscany.sca.binding.http.xml; +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 javax.xml.stream.XMLStreamWriter; +import org.apache.tuscany.sca.assembly.OperationSelector; +import org.apache.tuscany.sca.assembly.WireFormat; import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl; import org.apache.tuscany.sca.assembly.xml.Constants; import org.apache.tuscany.sca.binding.http.HTTPBinding; @@ -31,10 +36,12 @@ import org.apache.tuscany.sca.binding.http.HTTPBindingFactory; import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint; import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; +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.core.ExtensionPointRegistry; import org.apache.tuscany.sca.monitor.Monitor; import org.apache.tuscany.sca.monitor.Problem; import org.apache.tuscany.sca.monitor.Problem.Severity; @@ -47,10 +54,18 @@ public class HTTPBindingProcessor extends BaseStAXArtifactProcessor implements S private static final String URI = "uri"; private HTTPBindingFactory httpBindingFactory; + private StAXArtifactProcessor<Object> extensionProcessor; + private StAXAttributeProcessor<Object> extensionAttributeProcessor; private Monitor monitor; - public HTTPBindingProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) { + public HTTPBindingProcessor(ExtensionPointRegistry extensionPoints, + StAXArtifactProcessor extensionProcessor, + StAXAttributeProcessor extensionAttributeProcessor, + Monitor monitor) { + ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class); this.httpBindingFactory = modelFactories.getFactory(HTTPBindingFactory.class); + this.extensionProcessor = (StAXArtifactProcessor<Object>)extensionProcessor; + this.extensionAttributeProcessor = extensionAttributeProcessor; this.monitor = monitor; } @@ -64,22 +79,55 @@ public class HTTPBindingProcessor extends BaseStAXArtifactProcessor implements S public HTTPBinding read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException { HTTPBinding httpBinding = httpBindingFactory.createHTTPBinding(); - - String name = getString(reader, NAME); - if(name != null) { - httpBinding.setName(name); - } - String uri = getString(reader, URI); - if (uri != null) { - httpBinding.setURI(uri); + while(reader.hasNext()) { + QName elementName = null; + int event = reader.getEventType(); + switch (event) { + case START_ELEMENT: + elementName = reader.getName(); + + if (BINDING_HTTP_QNAME.equals(elementName)) { + String name = getString(reader, NAME); + if(name != null) { + httpBinding.setName(name); + } + + String uri = getString(reader, URI); + if (uri != null) { + httpBinding.setURI(uri); + } + } else { + // Read an extension element + Object extension = extensionProcessor.read(reader); + if (extension != null) { + if (extension instanceof WireFormat) { + httpBinding.setRequestWireFormat((WireFormat)extension); + } else if(extension instanceof OperationSelector) { + httpBinding.setOperationSelector((OperationSelector)extension); + } + } + } + + } + + if (event == END_ELEMENT && BINDING_HTTP_QNAME.equals(reader.getName())) { + break; + } + + // Read the next element + if (reader.hasNext()) { + reader.next(); + } } return httpBinding; } public void write(HTTPBinding httpBinding, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException { - writer.writeStartElement(Constants.SCA10_NS, BINDING_HTTP); + //writer.writeStartElement(Constants.SCA10_NS, BINDING_HTTP); + + writeStart(writer, BINDING_HTTP_QNAME.getNamespaceURI(), BINDING_HTTP_QNAME.getLocalPart()); // Write binding name if (httpBinding.getName() != null) { @@ -91,7 +139,8 @@ public class HTTPBindingProcessor extends BaseStAXArtifactProcessor implements S writer.writeAttribute(URI, httpBinding.getURI()); } - writer.writeEndElement(); + writeEnd(writer); + //writer.writeEndElement(); } |