Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.binding.ws.xml;
 
 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.util.List;
 import java.util.Map;
 
 
This is the StAXArtifactProcessor for the Web Services Binding.

Version:
$Rev: 1049025 $ $Date: 2010-12-14 12:32:00 +0200 (Tue, 14 Dec 2010) $
 
 
     private WSDLFactory wsdlFactory;
     private PolicyFactory policyFactory;
     //private PolicyFactory intentAttachPointTypeFactory;
     private StAXHelper staxHelper;
     
     
     public WebServiceBindingProcessor(ExtensionPointRegistry extensionPoints) {
         this. = extensionPoints;
         FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
         this. = modelFactories.getFactory(PolicyFactory.class);
         this. = modelFactories.getFactory(WebServiceBindingFactory.class);
         this. = modelFactories.getFactory(WSDLFactory.class);
         this. = new PolicySubjectProcessor();
          = StAXHelper.getInstance(extensionPoints);
     }
    
    
Report a warning.

Parameters:
problems
message
model
    private void warning(Monitor monitorString messageObject modelObject... messageParameters) {
       if (monitor != null) {
           Problem problem = monitor.createProblem(this.getClass().getName(), "binding-wsxml-validation-messages".modelmessage, (Object[])messageParameters);
           monitor.problem(problem);
       }
    }
         
    
Report a error.

Parameters:
problems
message
model
    private void error(Monitor monitorString messageObject modelObject... messageParameters) {
        if (monitor != null) {
            Problem problem = monitor.createProblem(this.getClass().getName(), "binding-wsxml-validation-messages".modelmessage, (Object[])messageParameters);
            monitor.problem(problem);
        }        
    }
        Monitor monitor = context.getMonitor();
        // Read a <binding.ws>
        WebServiceBinding wsBinding = .createWebServiceBinding();
        /*ExtensionType bindingType = intentAttachPointTypeFactory.createBindingType();
        bindingType.setName(getArtifactType());
        bindingType.setUnresolved(true);
        ((PolicySubject)wsBinding).setType(bindingType);*/
        wsBinding.setUnresolved(true);
        // Read policies
        .readPolicies(wsBindingreader);
        // Read the binding name
        String name = reader.getAttributeValue(null);
        if (name != null) {
            wsBinding.setName(name);
        }
        
        // a collection of endpoint specifications so that we can test that 
        // only one is present
        List<StringendpointSpecifications = new ArrayList<String>();
        // Read URI
        String uri = getURIString(reader);
        if (uri != null) {
            wsBinding.setURI(uri);
            
            // BWS20001
            if (context.getParentModel() instanceof Reference){
                try {
                    URI tmpURI = new URI(uri);
                    
                    if (!tmpURI.isAbsolute()){
                        error(monitor"URINotAbsolute"readeruri);
                    }
                } catch (URISyntaxException ex){
                    error(monitor"InvalidURISyntax"readerex.getMessage());
                }
                endpointSpecifications.add("uri");
            }
            
            // BWS20020
            if ((context.getParentModel() instanceof Callback) &&
                (((Callback)context.getParentModel()).getParentContract() instanceof org.apache.tuscany.sca.assembly.Service)){
                error(monitor"URIFoundForServiceCallback"readeruri);
            }
        }
        // Read a qname in the form:
        // namespace#wsdl.???(name)
        Boolean wsdlElementIsBinding = null;
        String wsdlElement = getURIString(reader);
        if (wsdlElement != null) {
            int index = wsdlElement.indexOf('#');
            if (index == -1) {
            	error(monitor"InvalidWsdlElementAttr"readerwsdlElement);
                //throw new ContributionReadException("Invalid WebService binding wsdlElement attribute: " + wsdlElement);
            	return wsBinding;
            }
            String namespace = wsdlElement.substring(0, index);
            wsBinding.setNamespace(namespace);
            String localName = wsdlElement.substring(index + 1);
            if (localName.startsWith("wsdl.service")) {
                // BWS20003
                if (context.getParentModel() instanceof org.apache.tuscany.sca.assembly.Service){
                    error(monitor"WSDLServiceOnService"readerwsdlElement);
                }
                
                // Read a wsdl.service
                localName = localName.substring("wsdl.service(".length(), localName.length() - 1);
                wsBinding.setServiceName(new QName(namespacelocalName));
                
                endpointSpecifications.add("#wsdl.service");
            } else if (localName.startsWith("wsdl.port")) {
                // Read a wsdl.port
                localName = localName.substring("wsdl.port(".length(), localName.length() - 1);
                int s = localName.indexOf('/');
                if (s == -1) {
                	error(monitor"InvalidWsdlElementAttr"readerwsdlElement);
                    //throw new ContributionReadException("Invalid WebService binding wsdlElement attribute: " + wsdlElement);
                } else {
                    wsBinding.setServiceName(new QName(namespacelocalName.substring(0, s)));
                    wsBinding.setPortName(localName.substring(s + 1));
                }
                
                endpointSpecifications.add("#wsdl.port");
            } else if (localName.startsWith("wsdl.endpoint")) {
                // Read a wsdl.endpoint
                localName = localName.substring("wsdl.endpoint(".length(), localName.length() - 1);
                int s = localName.indexOf('/');
                if (s == -1) {
                	error(monitor"InvalidWsdlElementAttr"readerwsdlElement);
                    //throw new ContributionReadException("Invalid WebService binding wsdlElement attribute: " + wsdlElement);
                } else {
                    wsBinding.setServiceName(new QName(namespacelocalName.substring(0, s)));
                    wsBinding.setEndpointName(localName.substring(s + 1));
                }
                
            } else if (localName.startsWith("wsdl.binding")) {
                // Read a wsdl.binding
                localName = localName.substring("wsdl.binding(".length(), localName.length() - 1);
                wsBinding.setBindingName(new QName(namespacelocalName));
                wsdlElementIsBinding = true;
            } else {
            	error(monitor"InvalidWsdlElementAttr"readerwsdlElement);
                //throw new ContributionReadException("Invalid WebService binding wsdlElement attribute: " + wsdlElement);
            }
        }
        // Read wsdlLocation
        String wsdliLocation = reader.getAttributeValue();
        if (wsdliLocation != null) {
            if (wsdlElement == null) {
                error(monitor"WsdliLocationMissingWsdlElement"reader);
            }
            String[] iris = wsdliLocation.split(" ");
            if (iris.length % 2 != 0) {
                error(monitor"WsdliLocationNotIRIPairs"reader);
            }
            for (int i=0; i<iris.length-1; i=i+2) {
                wsBinding.getWsdliLocations().put(iris[i], iris[i+1]);
            }
        }
        // Skip to end element
        while (reader.hasNext()) {
            int event = reader.next();
            switch (event) {
                case : {
                    if (.equals(reader.getName().getLocalPart())) {
                        if (wsdlElement != null && (wsdlElementIsBinding == null || !wsdlElementIsBinding)) {
                        	error(monitor"MustUseWsdlBinding"readerwsdlElement);
                            throw new ContributionReadException(wsdlElement + " must use wsdl.binding when using wsa:EndpointReference");
                        }
                        
                        wsBinding.setEndPointReference(EndPointReferenceHelper.readEndPointReference(reader));
                        endpointSpecifications.add("wsa:EndpointReference");
                    } 
                }
                    break;
            }
            if (event ==  && .equals(reader.getName())) {
                break;
            }
        }
        
        if (endpointSpecifications.size() > 1){
            error(monitor"MultipleEndpointsSpecified"readerendpointSpecifications.toString() );
        }
        
        return wsBinding;
    }
    protected void processEndPointReference(XMLStreamReader readerWebServiceBinding wsBinding) {
    }
    public void write(WebServiceBinding wsBindingXMLStreamWriter writerProcessorContext contextthrows ContributionWriteException,
        XMLStreamException {
        // Write a <binding.ws>
        writer.writeStartElement();
        .writePolicyAttributes(wsBindingwriter);
        // Write binding name
        if (wsBinding.getName() != null) {
            writer.writeAttribute(wsBinding.getName());
        }
        // Write binding URI
        if (wsBinding.getURI() != null) {
            writer.writeAttribute(wsBinding.getURI());
        }
        // Write wsdlElement attribute
        if (wsBinding.getPortName() != null) {
            // Write namespace#wsdl.port(service/port)
            String wsdlElement =
                wsBinding.getServiceName().getNamespaceURI() + "#wsdl.port("
                    + wsBinding.getServiceName().getLocalPart()
                    + "/"
                    + wsBinding.getPortName()
                    + ")";
            writer.writeAttribute(wsdlElement);
        } else if (wsBinding.getEndpointName() != null) {
            // Write namespace#wsdl.endpoint(service/endpoint)
            String wsdlElement =
                wsBinding.getServiceName().getNamespaceURI() + "#wsdl.endpoint("
                    + wsBinding.getServiceName().getLocalPart()
                    + "/"
                    + wsBinding.getEndpointName()
                    + ")";
            writer.writeAttribute(wsdlElement);
        } else if (wsBinding.getBindingName() != null) {
            // Write namespace#wsdl.binding(binding)
            String wsdlElement =
                wsBinding.getBindingName().getNamespaceURI() + "#wsdl.binding("
                    + wsBinding.getBindingName().getLocalPart()
                    + ")";
            writer.writeAttribute(wsdlElement);
        } else if (wsBinding.getServiceName() != null) {
            // Write namespace#wsdl.service(service)
            String wsdlElement =
                wsBinding.getServiceName().getNamespaceURI() + "#wsdl.service("
                    + wsBinding.getServiceName().getLocalPart()
                    + ")";
            writer.writeAttribute(wsdlElement);
        }
        // Write wsdli:location
        if (wsBinding.getWsdliLocations().size() > 0) {
            StringBuilder wsdliLocation = new StringBuilder();
            Map<StringStringwl = wsBinding.getWsdliLocations();
            for (String ns : wl.keySet()) {
                if (wsdliLocation.length() > 0) {
                    wsdliLocation.append(' ');
                }
                wsdliLocation.append(ns); 
                wsdliLocation.append(' '); 
                wsdliLocation.append(wl.get(ns)); 
            }
            writer.writeAttribute(wsdliLocation.toString());
        }
        if (wsBinding.getEndPointReference() != null) {
            EndPointReferenceHelper.writeEndPointReference(wsBinding.getEndPointReference(), writer);
        }
        writer.writeEndElement();
    }
    public void resolve(WebServiceBinding modelModelResolver resolverProcessorContext contextthrows ContributionResolveException {
        
    	if (model == null || !model.isUnresolved())
    		return;
    	Monitor monitor = context.getMonitor();	
    	WSDLDefinition wsdlDefinition = .createWSDLDefinition();
        wsdlDefinition.setUnresolved(true);
        wsdlDefinition.setNamespace(model.getNamespace());
        wsdlDefinition.setNameOfBindingToResolve(model.getBindingName());
        wsdlDefinition.setNameOfServiceToResolve(model.getServiceName());
        wsdlDefinition.getWsdliLocations().putAll(model.getWsdliLocations());
        WSDLDefinition resolved = resolver.resolveModel(WSDLDefinition.classwsdlDefinitioncontext);
        if (!resolved.isUnresolved()) {
            wsdlDefinition.setDefinition(resolved.getDefinition());
            wsdlDefinition.setLocation(resolved.getLocation());
            wsdlDefinition.setURI(resolved.getURI());
            wsdlDefinition.getImportedDefinitions().addAll(resolved.getImportedDefinitions());
            wsdlDefinition.getXmlSchemas().addAll(resolved.getXmlSchemas());
            wsdlDefinition.setUnresolved(false);
            model.setUserSpecifiedWSDLDefinition(wsdlDefinition);
            if (model.getBindingName() != null) {
                WSDLObject<Bindingbinding = wsdlDefinition.getWSDLObject(Binding.classmodel.getBindingName());
                if (binding != null) {
                    wsdlDefinition.setDefinition(binding.getDefinition());
                    model.setBinding(binding.getElement());
                } else {
                	error(monitor"WsdlBindingDoesNotMatch"wsdlDefinitionmodel.getBindingName());
                }
            }
            if (model.getServiceName() != null) {
                WSDLObject<Serviceservice = wsdlDefinition.getWSDLObject(Service.classmodel.getServiceName());
                if (service != null) {
                    wsdlDefinition.setDefinition(service.getDefinition());
                    model.setService(service.getElement());
                    
                    Port port = null;
                    if (model.getPortName() != null) {
                        port = service.getElement().getPort(model.getPortName());
                    } else {
                        // BWS20006 - no port specified so pick the first one
                        port = (Port)service.getElement().getPorts().values().iterator().next();
                    }
                    
                    if (port != null) {
                        model.setPort(port);
                        model.setBinding(port.getBinding());
                        
                        // if no URI specified set it from the WSDL port location
                        if (model.getURI() == null){
                            model.setURI(getPortAddress(port));
                        }
                    } else {
                        error(monitor"WsdlPortTypeDoesNotMatch"wsdlDefinitionmodel.getPortName());
                    }
                } else {
                	error(monitor"WsdlServiceDoesNotMatch"wsdlDefinitionmodel.getServiceName());
                }
            }
            PortType portType = getPortType(model);
            if (portType != null) {
                WSDLInterfaceContract interfaceContract = .createWSDLInterfaceContract();
                WSDLInterface wsdlInterface = null;
                try {
                    wsdlInterface = .createWSDLInterface(portTypewsdlDefinitionresolvercontext.getMonitor());
                } catch (InvalidInterfaceException e) {
                	warning(monitor"InvalidInterfaceException"model.getName(), e.getMessage()); 
                }
                interfaceContract.setInterface(wsdlInterface);
                interfaceContract.setCallbackInterface(wsdlInterface.getCallbackInterface());
                model.setBindingInterfaceContract(interfaceContract);
            }
            
            validateWSDL(contextmodel);
        } else {
            if (model.getBindingName() != null){
                error(monitor"WsdlBindingDoesNotMatch"modelmodel.getBindingName());
            }
            
            if (model.getServiceName() != null){
                error(monitor"WsdlServiceDoesNotMatch"modelmodel.getServiceName());
            }
        }
        
        .resolvePolicies(modelresolvercontext);
    }
    private void validateWSDL(ProcessorContext contextWebServiceBinding model) {
        WSDLDefinition wsdlDefinition = model.getUserSpecifiedWSDLDefinition();
        
        Port port = model.getPort();
        
        if (port != null){
            validateWSDLPort(contextmodelport);
        } 
        
        Binding binding = model.getBinding();
        
        if (binding != null){
            validateWSDLBinding(contextmodelbinding);
        } 
    }
    
    private void validateWSDLPort(ProcessorContext contextWebServiceBinding modelPort port){
        
        validateWSDLBinding(contextmodelport.getBinding());
        
    }
    
    private void validateWSDLBinding(ProcessorContext contextWebServiceBinding modelBinding binding){
        // BWS20005 & BWS20010 
        // Check that the WSDL binding is of a supported type
        if (!model.isHTTPTransport() && !model.isJMSTransport()){
            error(context.getMonitor(), 
                  "InvalidWSDLBindingTransport"
                  model
                  model.getBindingTransport());
        }
    }
    
    private PortType getPortType(WebServiceBinding model) {
        PortType portType = null;
        if (model.getPort() != null) {
            portType = model.getPort().getBinding().getPortType();
        } else if (model.getEndpoint() != null) {
            portType = model.getPort().getBinding().getPortType();
        } else if (model.getBinding() != null) {
            portType = model.getBinding().getPortType();
        } else if (model.getService() != null) {
            // FIXME: How to find the compatible port?
            Map ports = model.getService().getPorts();
            if (!ports.isEmpty()) {
                Port port = (Port)ports.values().iterator().next();
                portType = port.getBinding().getPortType();
            }
        }
        return portType;
    }
    
    public static String getPortAddress(Port port) {
        Object ext = port.getExtensibilityElements().get(0);
        if (ext instanceof SOAPAddress) {
            return ((SOAPAddress)ext).getLocationURI();
        }
        if (ext instanceof SOAP12Address) {
            return ((SOAP12Address)ext).getLocationURI();
        }
        return null;
    }    
    public QName getArtifactType() {
        return .;
    }
    public Class<WebServiceBindinggetModelType() {
        return WebServiceBinding.class;
    }
New to GrepCode? Check out our FAQ X