tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jmar...@apache.org
Subject svn commit: r426629 [2/4] - in /incubator/tuscany/java/sca/bindings/binding.axis2: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tuscany/ src/main/java/org/apache/tuscany/binding/ src/main/java/o...
Date Fri, 28 Jul 2006 18:08:37 GMT
Added: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java?rev=426629&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
(added)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
Fri Jul 28 11:08:35 2006
@@ -0,0 +1,489 @@
+/**
+ *
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed 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.binding.axis2.util;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import javax.wsdl.Binding;
+import javax.wsdl.BindingInput;
+import javax.wsdl.BindingOperation;
+import javax.wsdl.BindingOutput;
+import javax.wsdl.Input;
+import javax.wsdl.Message;
+import javax.wsdl.Operation;
+import javax.wsdl.Output;
+import javax.wsdl.Part;
+import javax.wsdl.extensions.soap.SOAPBinding;
+import javax.wsdl.extensions.soap.SOAPHeader;
+import javax.wsdl.extensions.soap.SOAPOperation;
+import javax.xml.namespace.QName;
+
+/**
+ * Metadata for a WSDL operation
+ */
+@SuppressWarnings({"ALL"})
+public class WebServiceOperationMetaData implements Serializable {
+    private static final long serialVersionUID = 2425306250256227724L;
+
+    // WSDL Binding and BindingOperation
+    private Binding binding;
+    private BindingOperation bindingOperation;
+    // Fields to cache derived metadata
+    private transient Set<Part> inputHeaderParts;
+    private transient Set<Part> outputHeaderParts;
+    private transient String style;
+    private transient String use;
+    private transient String soapAction;
+    private transient List<Object> signature;
+    private String encoding;
+    private transient QName rpcOperationName;
+
+    public WebServiceOperationMetaData(Binding binding, BindingOperation bindingOperation)
{
+        this.binding = binding;
+        this.bindingOperation = bindingOperation;
+    }
+
+    public WebServiceOperationMetaData(Binding binding, BindingOperation bindingOperation,
String style, String use,
+                                       String encoding,
+                                       String soapAction) {
+        this.binding = binding;
+        this.bindingOperation = bindingOperation;
+        this.style = style;
+        this.use = use;
+        this.encoding = encoding;
+        this.soapAction = soapAction;
+    }
+
+    public Set<Part> getInputHeaderParts() {
+        if (inputHeaderParts == null) {
+            // Build a set of header parts that we need to exclude
+            inputHeaderParts = new HashSet<Part>();
+            BindingInput bindingInput = bindingOperation.getBindingInput();
+
+            if (bindingInput != null) {
+                Operation operation = bindingOperation.getOperation();
+                javax.wsdl.Message message = operation.getInput().getMessage();
+                List elements = bindingInput.getExtensibilityElements();
+                for (Iterator i = elements.iterator(); i.hasNext();) {
+                    Object extensibilityElement = i.next();
+                    Part part = getPartFromSOAPHeader(message, extensibilityElement);
+                    if (part != null) {
+                        inputHeaderParts.add(part);
+                    }
+                }
+            }
+        }
+        return inputHeaderParts;
+    }
+
+    public Set<Part> getOutputHeaderParts() {
+        if (outputHeaderParts == null) {
+            // Build a set of header parts that we need to exclude
+            outputHeaderParts = new HashSet<Part>();
+            BindingOutput bindingOutput = bindingOperation.getBindingOutput();
+
+            if (bindingOutput != null) {
+                Operation operation = bindingOperation.getOperation();
+                javax.wsdl.Message message = operation.getOutput().getMessage();
+                List elements = bindingOutput.getExtensibilityElements();
+                for (Iterator i = elements.iterator(); i.hasNext();) {
+                    Object extensibilityElement = i.next();
+                    Part part = getPartFromSOAPHeader(message, extensibilityElement);
+                    if (part != null) {
+                        outputHeaderParts.add(part);
+                    }
+                }
+            }
+        }
+        return outputHeaderParts;
+    }
+
+    private Part getPartFromSOAPHeader(Message message, Object extensibilityElement) {
+        Part part = null;
+        if (extensibilityElement instanceof SOAPHeader) {
+            SOAPHeader soapHeader = (SOAPHeader) extensibilityElement;
+            QName msgName = soapHeader.getMessage();
+            if (message.getQName().equals(msgName)) {
+                part = message.getPart(soapHeader.getPart());
+            }
+        } else if (extensibilityElement instanceof SOAPHeader) {
+            SOAPHeader soapHeader = (SOAPHeader) extensibilityElement;
+            QName msgName = soapHeader.getMessage();
+            if (message.getQName().equals(msgName)) {
+                part = message.getPart(soapHeader.getPart());
+            }
+        }
+        return part;
+    }
+
+    public String getStyle() {
+        if (style == null) {
+            SOAPOperation soapOperation = (SOAPOperation) WebServicePortMetaData
+                .getExtensibilityElement(bindingOperation.getExtensibilityElements(),
+                    SOAPOperation.class);
+            if (soapOperation != null) {
+                style = soapOperation.getStyle();
+            }
+            if (style == null) {
+                SOAPBinding soapBinding = WebServicePortMetaData
+                    .getExtensibilityElement(binding.getExtensibilityElements(), SOAPBinding.class);
+                if (soapBinding != null) {
+                    style = soapBinding.getStyle();
+                }
+            }
+            if (style == null) {
+                style = "document";
+            }
+        }
+        return style;
+    }
+
+    /**
+     * Returns the SOAP action for the given operation.
+     */
+    public String getSOAPAction() {
+        if (soapAction == null) {
+            final List wsdlBindingOperationExtensions = bindingOperation.getExtensibilityElements();
+            final SOAPOperation soapOp =
+                WebServicePortMetaData.getExtensibilityElement(wsdlBindingOperationExtensions,
SOAPOperation.class);
+            if (soapOp != null) {
+                soapAction = soapOp.getSoapActionURI();
+            }
+        }
+        return soapAction;
+    }
+
+    public QName getRPCOperationName() {
+        if (rpcOperationName == null) {
+            javax.wsdl.extensions.soap.SOAPBody soapBody = getSOAPBody(true);
+            String ns =
+                (soapBody != null) ? soapBody.getNamespaceURI() : binding.getPortType().getQName().getNamespaceURI();
+            String name = bindingOperation.getOperation().getName();
+            rpcOperationName = new QName(ns, name);
+        }
+        return rpcOperationName;
+    }
+
+    private List<String> getSOAPBodyParts(boolean input) {
+        javax.wsdl.extensions.soap.SOAPBody soapBody = getSOAPBody(input);
+        if (soapBody != null) {
+            List parts = soapBody.getParts();
+            if (parts != null) {
+                List<String> names = new ArrayList<String>();
+                for (Iterator i = parts.iterator(); i.hasNext();) {
+                    Object part = i.next();
+                    if (part instanceof String) {
+                        names.add((String) part);
+                    } else if (part instanceof Part) {
+                        names.add(((Part) part).getName());
+                    }
+                }
+                return names;
+            } else {
+                return null;
+            }
+        } else {
+            return null;
+        }
+    }
+
+    private javax.wsdl.extensions.soap.SOAPBody getSOAPBody(boolean input) {
+        List elements = null;
+        if (input) {
+            BindingInput bindingInput = bindingOperation.getBindingInput();
+            if (bindingInput == null) {
+                return null;
+            }
+            elements = bindingInput.getExtensibilityElements();
+        } else {
+            BindingOutput bindingOutput = bindingOperation.getBindingOutput();
+            if (bindingOutput == null) {
+                return null;
+            }
+            elements = bindingOutput.getExtensibilityElements();
+        }
+        javax.wsdl.extensions.soap.SOAPBody soapBody = WebServicePortMetaData.getExtensibilityElement(elements,
+            javax.wsdl.extensions.soap.SOAPBody.class);
+        return soapBody;
+    }
+
+    /**
+     * Returns the use attribute
+     */
+    public String getUse() {
+        if (use == null) {
+            javax.wsdl.extensions.soap.SOAPBody soapBody = getSOAPBody(true);
+            if (soapBody != null) {
+                use = soapBody.getUse();
+            }
+            if (use == null) {
+                use = "literal";
+            }
+        }
+        return use;
+    }
+
+    @SuppressWarnings("unchecked")
+    public String getEncoding() {
+        if (encoding == null) {
+            javax.wsdl.extensions.soap.SOAPBody soapBody = getSOAPBody(true);
+            if (soapBody != null) {
+                List<String> styles = (List<String>) soapBody.getEncodingStyles();
+                if (styles != null && !styles.isEmpty()) {
+                    encoding = styles.get(0);
+                }
+            }
+            if (encoding == null) {
+                encoding = "";
+            }
+        }
+        return encoding;
+    }
+
+    public boolean isDocLitWrapped() {
+        boolean flag = getStyle().equals("document") && getUse().equals("literal");
+        if (!flag) {
+            return false;
+        }
+        Message msg = getMessage(true);
+        if (msg == null) {
+            return false;
+        }
+        List parts = msg.getOrderedParts(null);
+        if (parts.size() != 1) {
+            return false;
+        }
+        Part part = (Part) parts.get(0);
+        QName element = part.getElementName();
+        if (element == null) {
+            return false;
+        }
+        return element.getLocalPart().equals(bindingOperation.getOperation().getName());
+    }
+
+    /*
+     * public SOAPMediator createMediator(boolean serverMode) throws SOAPException {
+     * // create a new mediator for each invoke for thread-safety
+     * boolean rpcStyle = getStyle().equals("rpc"); boolean rpcEncoded = isEncoded();
+     * 
+     * SOAPMediator mediator = null;
+     * 
+     * if (!rpcStyle) { // Document mediator = new SOAPDocumentLiteralMediatorImpl(this,
serverMode);
+     * } else { if (!rpcEncoded) mediator = new
+     * SOAPRPCLiteralMediatorImpl(this, serverMode); // RPC-literal else mediator =
+     * new SOAPRPCEncodedMediatorImpl(this, serverMode); // RPC-encoded }
+     * return mediator; }
+     */
+
+    /**
+     * Get the operation signature from the WSDL operation
+     */
+    public List<?> getOperationSignature() {
+        if (signature == null) {
+            signature = new ArrayList<Object>();
+
+            Operation operation = bindingOperation.getOperation();
+            if (operation == null) {
+                return signature;
+            }
+
+            final Input input = operation.getInput();
+            if (input == null) {
+                return signature;
+            }
+
+            String sstyle = getStyle();
+
+            if ("rpc".equals(sstyle)) {
+                Collection partNames = input.getMessage().getParts().values();
+                for (Iterator i = partNames.iterator(); i.hasNext();) {
+                    Part part = (Part) i.next();
+                    signature.add(part.getName());
+                }
+            } else {
+                /*
+                 * WS-I Basic Profile 1.1 4.7.6 Operation Signatures Definition: operation
signature
+                 * 
+                 * The profile defines the "operation signature" to be the fully qualified
name of the child element of
+                 * SOAP body of the SOAP input
+                 * message described by an operation in a WSDL binding.
+                 * 
+                 * In the case of rpc-literal binding, the operation name is used as a wrapper
for the part accessors.
+                 * In the document-literal case, designed so that they meet this requirement.
+                 *
+                 * An endpoint that supports multiple operations must unambiguously identify
the operation being
+                 * invoked based on the input message
+                 * that it receives. This is only possible if all the operations specified
in the wsdl:binding
+                 * associated with an endpoint have a
+                 * unique operation signature.
+                 * 
+                 * R2710 The operations in a wsdl:binding in a DESCRIPTION MUST result in
operation signatures that are
+                 * different from one another.
+                 */
+                List<String> bodyParts = getSOAPBodyParts(true);
+
+                Collection<?> parts = input.getMessage().getParts().values();
+                // Exclude the parts to be transmitted in SOAP header
+                if (bodyParts == null) {
+                    parts.removeAll(getInputHeaderParts());
+                }
+                for (Iterator i = parts.iterator(); i.hasNext();) {
+                    Part part = (Part) i.next();
+                    if (bodyParts == null) {
+                        // All parts
+                        QName elementName = part.getElementName();
+                        if (elementName == null) {
+                            elementName = new QName("", part.getName());
+                            // TODO: [rfeng] throw new
+                            // ServiceRuntimeException("Message part for
+                            // document style must refer to an XSD element
+                            // using a QName: " + part);
+                        }
+                        signature.add(elementName);
+                    } else {
+                        // "parts" in soap:body
+                        if (bodyParts.contains(part.getName())) {
+                            QName elementName = part.getElementName();
+                            if (elementName == null) {
+                                elementName = new QName("", part.getName());
+                                // TODO: [rfeng] throw new
+                                // ServiceRuntimeException("Message part for
+                                // document style must refer to an XSD
+                                // element using a QName: " + part);
+                            }
+                            signature.add(elementName);
+                        }
+
+                    }
+                }
+            }
+        }
+        return signature;
+    }
+
+    public Message getMessage(boolean isInput) {
+        Operation operation = bindingOperation.getOperation();
+        if (operation == null) {
+            return null;
+        }
+
+        if (isInput) {
+            final Input input = operation.getInput();
+            return input == null ? null : input.getMessage();
+        } else {
+            final Output output = operation.getOutput();
+            return output == null ? null : output.getMessage();
+        }
+    }
+
+    public Part getInputPart(int index) {
+        Part part = null;
+        Message message = getMessage(true);
+        if (message == null) {
+            return part;
+        }
+
+        List parts = message.getOrderedParts(null);
+        return (Part) parts.get(index);
+
+    }
+
+    public Part getOutputPart(int index) {
+        Part part = null;
+        Message message = getMessage(false);
+        if (message == null) {
+            return part;
+        }
+
+        List parts = message.getOrderedParts(null);
+        return (Part) parts.get(index);
+
+    }
+
+    /**
+     * Get a list of indexes for each part in the SOAP body
+     *
+     * @param isInput
+     */
+    public List<Integer> getBodyPartIndexes(boolean isInput) {
+        List<Integer> indexes = new ArrayList<Integer>();
+
+        Message message = getMessage(isInput);
+        if (message == null) {
+            return indexes;
+        }
+
+        List<String> bodyParts = getSOAPBodyParts(isInput);
+        List parts = message.getOrderedParts(null);
+        Set headerParts = isInput ? getInputHeaderParts() : getOutputHeaderParts();
+
+        int index = 0;
+        for (Iterator i = parts.iterator(); i.hasNext(); index++) {
+            Part part = (Part) i.next();
+            if (headerParts.contains(part)) {
+                continue;
+            }
+            if (bodyParts == null) {
+                // All parts
+                indexes.add(index);
+            } else {
+                // "parts" in soap:body
+                if (bodyParts.contains(part.getName())) {
+                    indexes.add(index);
+                }
+            }
+        }
+        return indexes;
+    }
+
+    /**
+     * Get the corresponding index for a part in the SOAP header by element name
+     *
+     * @param elementName
+     * @param isInput
+     */
+    public int getHeaderPartIndex(QName elementName, boolean isInput) {
+
+        Message message = getMessage(isInput);
+        if (message == null) {
+            return -1;
+        }
+
+        List parts = message.getOrderedParts(null);
+        Set headerParts = isInput ? getInputHeaderParts() : getOutputHeaderParts();
+
+        int index = 0;
+        for (Iterator i = parts.iterator(); i.hasNext(); index++) {
+            Part part = (Part) i.next();
+            // Test if the part is in header section
+            if (headerParts.contains(part) && elementName.equals(part.getElementName()))
{
+                return index;
+            }
+        }
+        return -1;
+    }
+
+    public BindingOperation getBindingOperation() {
+        return bindingOperation;
+    }
+
+}
\ No newline at end of file

Propchange: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Added: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java?rev=426629&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
(added)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
Fri Jul 28 11:08:35 2006
@@ -0,0 +1,375 @@
+/**
+ *
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed 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.binding.axis2.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.wsdl.Binding;
+import javax.wsdl.BindingOperation;
+import javax.wsdl.Definition;
+import javax.wsdl.Operation;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import javax.wsdl.extensions.soap.SOAPAddress;
+import javax.wsdl.extensions.soap.SOAPBinding;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.spi.model.WSDLServiceContract;
+
+/**
+ * Metadata for a WSDL port
+ *
+ */
+public class WebServicePortMetaData {
+
+    private Service wsdlService;
+    private QName wsdlServiceName;
+    private Port wsdlPort;
+    private Binding wsdlBinding;
+    private QName wsdlPortName;
+    private PortType wsdlPortType;
+    private QName wsdlPortTypeName;
+    private String endpoint;
+    private boolean managed;
+    private List<WebServiceOperationMetaData> allOperationMetaData;
+    private WSDLServiceContract interfaceType;
+
+    /**
+     * Constructor
+     *
+     * @param wsdlDefinition
+     */
+    public WebServicePortMetaData(Definition wsdlDefinition, Port wsdlPort, String endpoint,
boolean managed) {
+
+        // Lookup the named port
+        this.wsdlPort = wsdlPort;
+        wsdlPortName = new QName(wsdlDefinition.getTargetNamespace(), wsdlPort.getName());
+        Collection services = wsdlDefinition.getServices().values();
+        for (Object serviceObj : services) {
+            Service service = (Service) serviceObj;
+            if (service.getPorts().containsValue(wsdlPort)) {
+                wsdlService = service;
+                wsdlServiceName = service.getQName();
+                break;
+            }
+        }
+
+        // Save the binding
+        wsdlBinding = wsdlPort.getBinding();
+        if (wsdlBinding == null) {
+            throw new IllegalArgumentException("WSDL binding cannot be found for " + wsdlPortName);
+        }
+
+        // Save the portType
+        wsdlPortType = wsdlBinding.getPortType();
+        if (wsdlPortType == null) {
+            throw new IllegalArgumentException("WSDL portType cannot be found for " + wsdlPortName);
+        }
+        wsdlPortTypeName = wsdlPortType.getQName();
+
+        // Save the endpoint
+        this.endpoint = endpoint;
+
+        // Track if this endpoint is managed or not
+        this.managed = managed;
+    }
+
+    /**
+     * Constructor
+     *
+     * @param serviceName
+     * @param portName
+     * @param portTypeName
+     * @param endpoint
+     */
+    public WebServicePortMetaData(QName serviceName, String portName, QName portTypeName,
String endpoint) {
+        wsdlServiceName = serviceName;
+        wsdlPortName = new QName(serviceName.getNamespaceURI(), portName);
+        wsdlPortTypeName = portTypeName;
+        this.endpoint = endpoint;
+    }
+
+    /**
+     * @return Returns the wsdlPort.
+     */
+    public javax.wsdl.Port getPort() {
+        return wsdlPort;
+    }
+
+    /**
+     * @return Returns the wsdlService.
+     */
+    public QName getServiceName() {
+        return wsdlServiceName;
+    }
+
+    /**
+     * @return Returns the wsdlService.
+     */
+    public javax.wsdl.Service getService() {
+        return wsdlService;
+    }
+
+    /**
+     * @return Returns the wsdlPortType.
+     */
+    public PortType getPortType() {
+        return wsdlPortType;
+    }
+
+    /**
+     * @return Returns the wsdlPortType.
+     */
+    public QName getPortTypeName() {
+        return wsdlPortTypeName;
+    }
+
+    /**
+     * @return Returns the wsdlBinding.
+     */
+    public Binding getBinding() {
+        return wsdlBinding;
+    }
+
+    /**
+     * @return Returns the wsdlPortName.
+     */
+    public QName getPortName() {
+        return wsdlPortName;
+    }
+
+    /**
+     * Returns the endpoint of a given port.
+     */
+    public String getEndpoint() {
+
+        // Return the specified endpoint
+        if (endpoint != null) {
+            return endpoint;
+        }
+
+        // Find the target endpoint on the port
+        if (wsdlPort != null) {
+            final List wsdlPortExtensions = wsdlPort.getExtensibilityElements();
+            for (final Object extension : wsdlPortExtensions) {
+                if (extension instanceof SOAPAddress) {
+                    return ((SOAPAddress) extension).getLocationURI();
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the SOAP binding style.
+     */
+    public String getStyle() {
+
+        // Find the binding style
+        String style = null;
+        if (wsdlBinding != null) {
+            final List wsdlBindingExtensions = wsdlBinding.getExtensibilityElements();
+            SOAPBinding soapBinding = getExtensibilityElement(wsdlBindingExtensions, SOAPBinding.class);
+            if (soapBinding != null) {
+                style = soapBinding.getStyle();
+            }
+        }
+
+        // Default to document
+        return (style == null) ? "document" : style;
+    }
+
+    /**
+     * Returns the use attribute
+     */
+    public String getUse() {
+        List<WebServiceOperationMetaData> list = getAllOperationMetaData();
+        return list.get(0).getUse();
+    }
+
+    /**
+     * Returns the encoding attribute
+     */
+    public String getEncoding() {
+        List<WebServiceOperationMetaData> list = getAllOperationMetaData();
+        return list.get(0).getEncoding();
+    }
+
+    /**
+     * @return Returns true if this is a managed web service.
+     */
+    public boolean isManaged() {
+        return managed;
+    }
+
+    /**
+     * Returns the first extensibility element of the given type.
+     *
+     * @param elements
+     * @param type
+     */
+    public static <T> T getExtensibilityElement(List elements, Class<T> type)
{
+        for (Object element : elements) {
+            if (type.isInstance(element)) {
+                return type.cast(element);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the extensibility elements of the given type.
+     *
+     * @param elements
+     * @param type
+     * @return List
+     */
+    public static <T> List<T> getExtensibilityElements(List elements, Class<T>
type) {
+        List<T> result = new ArrayList<T>();
+        for (Object element : elements) {
+            if (type.isInstance(element)) {
+                result.add(type.cast(element));
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Get the operation signature from the SOAP Body
+     *
+     * @return A list of QNames
+     */
+    // public static List getOperationSignature(javax.xml.soap.SOAPBody body) {
+    // List signature = new ArrayList();
+    // for (Iterator i = body.getChildElements(); i.hasNext();) {
+    // Object child = i.next();
+    // if (child instanceof SOAPBodyElement) {
+    // Name name = ((SOAPBodyElement) child).getElementName();
+    // QName qname = new QName(name.getURI(), name.getLocalName(), name.getPrefix());
+    // signature.add(qname);
+    // }
+    // }
+    // return signature;
+    // }
+    // public static List getRPCOperationSignature(javax.xml.soap.SOAPBody body) {
+    // List signature = new ArrayList();
+    // for (Iterator i = body.getChildElements(); i.hasNext();) {
+    // Object child = i.next();
+    // if (child instanceof SOAPBodyElement) {
+    // SOAPBodyElement op = ((SOAPBodyElement) child);
+    // for (Iterator j = op.getChildElements(); j.hasNext();) {
+    // Object part = i.next();
+    // if (part instanceof SOAPElement) {
+    // SOAPElement p = (SOAPElement) part;
+    // signature.add(p.getLocalName());
+    // }
+    // }
+    // }
+    // }
+    // return signature;
+    // }
+    // public WebServiceOperationMetaData getOperationMetaData(javax.xml.soap.SOAPBody body)
{
+    // List s1 = getOperationSignature(body);
+    // // List rpcParts = getRPCOperationSignature(body);
+    // for (Iterator it = getAllOperationMetaData().iterator(); it.hasNext();) {
+    // WebServiceOperationMetaData descriptor = (WebServiceOperationMetaData) it.next();
+    //
+    // String style = descriptor.getStyle();
+    //
+    // if (style.equals("document")) {
+    // List s2 = descriptor.getOperationSignature();
+    // if (s1.equals(s2))
+    // return descriptor;
+    // } else {
+    // QName op1 = (QName) s1.get(0);
+    // QName op2 = descriptor.getRPCOperationName();
+    // if (op1.equals(op2)) {
+    // /*
+    // * // FIXME: [rfeng] We don't support method overloading
+    // * List partNames = getOperationSignature(binding,
+    // * bindingOperation); if (rpcParts.equals(partNames))
+    // */
+    // return descriptor;
+    // }
+    // }
+    // }
+    // return null;
+    // }
+    public List<WebServiceOperationMetaData> getAllOperationMetaData() {
+        if (allOperationMetaData == null) {
+            allOperationMetaData = new ArrayList<WebServiceOperationMetaData>();
+            for (Iterator it = wsdlBinding.getBindingOperations().iterator(); it.hasNext();)
{
+                final BindingOperation bindingOperation = (BindingOperation) it.next();
+                if (bindingOperation.getOperation() != null) {
+                    allOperationMetaData.add(new WebServiceOperationMetaData(wsdlBinding,
bindingOperation));
+                }
+            }
+        }
+        return allOperationMetaData;
+    }
+
+    public WebServiceOperationMetaData getOperationMetaData(String operationName) {
+        StringBuilder sb = new StringBuilder(operationName);
+        sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
+        String capatalizedOpName = sb.toString();
+
+        for (WebServiceOperationMetaData webServiceOperationMetaData : getAllOperationMetaData())
{
+            WebServiceOperationMetaData descriptor = (WebServiceOperationMetaData) webServiceOperationMetaData;
+            String opName = descriptor.getBindingOperation().getOperation().getName();
+
+            if (opName.equals(operationName) || opName.equals(capatalizedOpName)) {
+                return descriptor;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the WSDL service contract
+     *
+     * @return WSDLServiceContract
+     */
+    public WSDLServiceContract getInterfaceType() {
+        return interfaceType;
+    }
+
+    /**
+     * Get the WSDL operation name for a Java method name
+     */
+    public String getWSDLOperationName(String methodName) {
+        StringBuilder sb = new StringBuilder(methodName);
+        sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
+        String capatalizedOpName = sb.toString();
+        for (Object o : wsdlPortType.getOperations()) {
+            Operation operation = (Operation) o;
+            String wsdlOpName = operation.getName();
+            if (wsdlOpName.equals(methodName)) {
+                return wsdlOpName;
+            }
+            if (wsdlOpName.equals(capatalizedOpName)) {
+                return wsdlOpName;
+            }
+        }
+        return null;
+    }
+
+}
\ No newline at end of file

Propchange: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org


Mime
View raw message