Author: antelder
Date: Thu Nov 10 09:28:30 2011
New Revision: 1200239

URL: http://svn.apache.org/viewvc?rev=1200239&view=rev
Log:
TUSCANY-3975: Apply patch from Rashmi Hunt to fix Missing Extension processing 
in WebServiceBindingProcessor class

Modified:
    
tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java?rev=1200239&r1=1200238&r2=1200239&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/xml/WebServiceBindingProcessor.java
 Thu Nov 10 09:28:30 2011
@@ -21,7 +21,6 @@ package org.apache.tuscany.sca.binding.w
 
 import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
-import static 
org.apache.tuscany.sca.binding.ws.xml.WebServiceConstants.SCA11_NS;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -36,11 +35,16 @@ import javax.wsdl.Service;
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.wsdl.extensions.soap12.SOAP12Address;
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Callback;
+import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
 import org.apache.tuscany.sca.assembly.Reference;
 import org.apache.tuscany.sca.assembly.xml.PolicySubjectProcessor;
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
@@ -50,8 +54,11 @@ import org.apache.tuscany.sca.contributi
 import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
 import 
org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
 import 
org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import 
org.apache.tuscany.sca.contribution.processor.ExtensibleStAXAttributeProcessor;
 import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.FactoryExtensionPoint;
@@ -77,9 +84,12 @@ public class WebServiceBindingProcessor 
     private WSDLFactory wsdlFactory;
     private WebServiceBindingFactory wsFactory;
     private PolicyFactory policyFactory;
+    private AssemblyFactory assemblyFactory;
     private PolicySubjectProcessor policyProcessor;
     //private PolicyFactory intentAttachPointTypeFactory;
     private StAXHelper staxHelper;
+    private StAXAttributeProcessor<Object> extensionAttributeProcessor;
+    private ProcessorContext processorContext;
     
     
     public WebServiceBindingProcessor(ExtensionPointRegistry extensionPoints) {
@@ -88,8 +98,14 @@ public class WebServiceBindingProcessor 
         this.policyFactory = modelFactories.getFactory(PolicyFactory.class);
         this.wsFactory = 
modelFactories.getFactory(WebServiceBindingFactory.class);
         this.wsdlFactory = modelFactories.getFactory(WSDLFactory.class);
+        this.assemblyFactory = 
modelFactories.getFactory(AssemblyFactory.class);        
         this.policyProcessor = new PolicySubjectProcessor(policyFactory);
         staxHelper = StAXHelper.getInstance(extensionPoints);
+        XMLInputFactory inputFactory = 
extensionPoints.getExtensionPoint(XMLInputFactory.class);
+        XMLOutputFactory outputFactory = 
extensionPoints.getExtensionPoint(XMLOutputFactory.class);
+        StAXAttributeProcessorExtensionPoint attributeExtensionPoint = 
extensionPoints.getExtensionPoint(StAXAttributeProcessorExtensionPoint.class);
+        this.extensionAttributeProcessor = new 
ExtensibleStAXAttributeProcessor(attributeExtensionPoint ,inputFactory, 
outputFactory);
+        this.processorContext = new ProcessorContext(extensionPoints);
     }
     
     /**
@@ -252,6 +268,26 @@ public class WebServiceBindingProcessor 
             }
         }
 
+        //add binding extensions
+        QName elementName = reader.getName();
+        for (int i = 0; i < reader.getAttributeCount(); i++) {
+            QName attributeName = reader.getAttributeName(i);
+            if(attributeName.getNamespaceURI() != null && 
attributeName.getNamespaceURI().length() > 0) {
+                
if(!elementName.getNamespaceURI().equals(attributeName.getNamespaceURI()) ) {
+                    Object attributeValue = 
extensionAttributeProcessor.read(attributeName, reader, processorContext);
+                    Extension attributeExtension;
+                    if (attributeValue instanceof Extension) {
+                        attributeExtension = (Extension)attributeValue;
+                    } else {
+                        attributeExtension = assemblyFactory.createExtension();
+                        attributeExtension.setQName(attributeName);
+                        attributeExtension.setValue(attributeValue);
+                        attributeExtension.setAttribute(true);
+                    }
+                    
((Extensible)wsBinding).getAttributeExtensions().add(attributeExtension);
+                }
+            }
+        }
         // Skip to end element
         while (reader.hasNext()) {
             int event = reader.next();
@@ -360,6 +396,12 @@ public class WebServiceBindingProcessor 
             writer.writeAttribute(WSDLI_NS, WSDL_LOCATION, 
wsdliLocation.toString());
         }
 
+        // Write extended attributes
+        for(Extension extension : 
((Extensible)wsBinding).getAttributeExtensions()) {
+            if(extension.isAttribute()) {
+                extensionAttributeProcessor.write(extension, writer, 
processorContext);
+            }
+        }
         if (wsBinding.getEndPointReference() != null) {
             
EndPointReferenceHelper.writeEndPointReference(wsBinding.getEndPointReference(),
 writer, staxHelper);
         }


Reply via email to