Author: keith
Date: Tue Aug  5 06:04:26 2008
New Revision: 20414
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=20414

Log:
Adding a patch to address Mashup-1061



Added:
   
branches/mashup/java/1.5/java/modules/patches/axis2/src/org/apache/axis2/util/
   
branches/mashup/java/1.5/java/modules/patches/axis2/src/org/apache/axis2/util/WSDLSerializationUtil.java
Modified:
   
branches/mashup/java/1.5/java/modules/patches/axis2/resources/axis2-patches.txt

Modified: 
branches/mashup/java/1.5/java/modules/patches/axis2/resources/axis2-patches.txt
URL: 
http://wso2.org/svn/browse/wso2/branches/mashup/java/1.5/java/modules/patches/axis2/resources/axis2-patches.txt?rev=20414&r1=20413&r2=20414&view=diff
==============================================================================
--- 
branches/mashup/java/1.5/java/modules/patches/axis2/resources/axis2-patches.txt 
    (original)
+++ 
branches/mashup/java/1.5/java/modules/patches/axis2/resources/axis2-patches.txt 
    Tue Aug  5 06:04:26 2008
@@ -7,3 +7,4 @@
 https://issues.apache.org/jira/browse/AXIS2-3961
 https://wso2.org/jira/browse/MASHUP-1048
 https://wso2.org/jira/browse/MASHUP-1056
+https://wso2.org/jira/browse/MASHUP-1061

Added: 
branches/mashup/java/1.5/java/modules/patches/axis2/src/org/apache/axis2/util/WSDLSerializationUtil.java
URL: 
http://wso2.org/svn/browse/wso2/branches/mashup/java/1.5/java/modules/patches/axis2/src/org/apache/axis2/util/WSDLSerializationUtil.java?pathrev=20414
==============================================================================
--- (empty file)
+++ 
branches/mashup/java/1.5/java/modules/patches/axis2/src/org/apache/axis2/util/WSDLSerializationUtil.java
    Tue Aug  5 06:04:26 2008
@@ -0,0 +1,576 @@
+/*
+ * 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.axis2.util;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMNode;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.description.AxisDescription;
+import org.apache.axis2.description.AxisMessage;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.PolicySubject;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.axis2.description.AxisBinding;
+import org.apache.axis2.description.AxisEndpoint;
+import org.apache.axis2.description.java2wsdl.Java2WSDLConstants;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.namespace.Constants;
+import org.apache.axis2.wsdl.HTTPHeaderMessage;
+import org.apache.axis2.wsdl.SOAPHeaderMessage;
+import org.apache.axis2.wsdl.SOAPModuleMessage;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyComponent;
+import org.apache.neethi.PolicyReference;
+import org.wso2.wsas.ServerManager;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLStreamException;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Helps the AxisService to WSDL process
+ */
+public class WSDLSerializationUtil {
+
+    public static final String CDATA_START = "<![CDATA[";
+    public static final String CDATA_START_REGEX = "<!\\[CDATA\\[";
+    public static final String CDATA_END = "]]>";
+    public static final String CDATA_END_REGEX = "\\]\\]>";
+
+    /**
+     * Given a namespace it returns the prefix for that namespace
+     * @param namespace - The namespace that the prefix is needed for
+     * @param nameSpaceMap - The namespaceMap
+     * @return - The prefix of the namespace
+     */
+    public static String getPrefix(String namespace, Map nameSpaceMap) {
+        Set keySet;
+        if (nameSpaceMap != null && (keySet = nameSpaceMap.keySet()) != null) {
+            Iterator keys = keySet.iterator();
+            while (keys.hasNext()) {
+                String key = (String) keys.next();
+                if (nameSpaceMap.get(key).equals(namespace)) {
+                    return key;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Gets the correct element name for a given message
+     * @param axisMessage - The axisMessage
+     * @param nameSpaceMap - The namespaceMap
+     * @return - The element name
+     */
+    public static String getElementName(AxisMessage axisMessage, Map 
nameSpaceMap) {
+        QName elementQName = axisMessage.getElementQName();
+        if (elementQName == null) {
+            return WSDL2Constants.NMTOKEN_NONE;
+        } else if (Constants.XSD_ANY.equals(elementQName)) {
+            return WSDL2Constants.NMTOKEN_ANY;
+        } else {
+            String prefix =
+                    
WSDLSerializationUtil.getPrefix(elementQName.getNamespaceURI(), nameSpaceMap);
+            return prefix + ":" + elementQName.getLocalPart();
+        }
+    }
+
+    /**
+     * Adds a soap header element to a given OMElement
+     * @param omFactory - An OMFactory
+     * @param list - The arraylist of soapHeaderMessages
+     * @param wsoap - The WSDL 2.0 SOAP namespace
+     * @param element - The element that the header should be added to
+     * @param nameSpaceMap - The namespaceMap
+     */
+    public static void addSOAPHeaderElements(OMFactory omFactory, ArrayList 
list, OMNamespace wsoap,
+                                             OMElement element, Map 
nameSpaceMap) {
+        for (int i = 0; i < list.size(); i++) {
+            SOAPHeaderMessage soapHeaderMessage = (SOAPHeaderMessage) 
list.get(i);
+            OMElement soapHeaderElement =
+                    omFactory.createOMElement(WSDL2Constants.ATTRIBUTE_HEADER, 
wsoap);
+            QName qName = soapHeaderMessage.getElement();
+            soapHeaderElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_ELEMENT, null,
+                    getPrefix(qName.getNamespaceURI(), nameSpaceMap) + ":" + 
qName.getLocalPart()));
+            soapHeaderElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_MUST_UNDERSTAND, null,
+                    Boolean.toString(soapHeaderMessage.isMustUnderstand())));
+            soapHeaderElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_REQUIRED, null,
+                    Boolean.toString(soapHeaderMessage.isRequired())));
+            element.addChild(soapHeaderElement);
+        }
+    }
+
+    /**
+     * Adds a soap module element to a given OMElement
+     * @param omFactory - An OMFactory
+     * @param list - The arraylist of soapModuleMessages
+     * @param wsoap - The WSDL 2.0 SOAP namespace
+     * @param element - The element that the header should be added to
+     */
+    public static void addSOAPModuleElements(OMFactory omFactory, ArrayList 
list, OMNamespace wsoap,
+                                             OMElement element) {
+        for (int i = 0; i < list.size(); i++) {
+            SOAPModuleMessage soapModuleMessage = (SOAPModuleMessage) 
list.get(i);
+            OMElement soapModuleElement =
+                    omFactory.createOMElement(WSDL2Constants.ATTRIBUTE_MODULE, 
wsoap);
+            soapModuleElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_REF, null, 
soapModuleMessage.getUri()));
+            element.addChild(soapModuleElement);
+        }
+    }
+
+    /**
+     * Adds a HTTP header element to a given OMElement
+     * @param omFactory - An OMFactory
+     * @param list - The arraylist of HTTPHeaderMessages
+     * @param whttp - The WSDL 2.0 HTTP namespace
+     * @param element - The element that the header should be added to
+     * @param nameSpaceMap - The namespaceMap
+     */
+    public static void addHTTPHeaderElements(OMFactory omFactory, ArrayList 
list, OMNamespace whttp,
+                                             OMElement element, Map 
nameSpaceMap) {
+        for (int i = 0; i < list.size(); i++) {
+            HTTPHeaderMessage httpHeaderMessage = (HTTPHeaderMessage) 
list.get(i);
+            OMElement httpHeaderElement =
+                    omFactory.createOMElement(WSDL2Constants.ATTRIBUTE_HEADER, 
whttp);
+            httpHeaderElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_NAME, null, 
httpHeaderMessage.getName()));
+            QName qName = httpHeaderMessage.getqName();
+            httpHeaderElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_TYPE, null,
+                    getPrefix(qName.getNamespaceURI(), nameSpaceMap) + ":" + 
qName.getLocalPart()));
+            httpHeaderElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_REQUIRED, null,
+                    
Boolean.valueOf(httpHeaderMessage.isRequired()).toString()));
+            element.addChild(httpHeaderElement);
+        }
+    }
+
+    /**
+     * Generates a default SOAP 11 Binding for a given AxisService
+     * @param fac - The OMFactory
+     * @param axisService - The AxisService
+     * @param wsdl the WSDL namespace
+     * @param wsoap - The WSDL 2.0 SOAP namespace
+     * @param tns - The target namespace
+     * @return - The generated SOAP11Binding element
+     */
+    public static OMElement generateSOAP11Binding(OMFactory fac, AxisService 
axisService,
+                                                  OMNamespace wsdl, 
OMNamespace wsoap,
+                                                  OMNamespace tns, String 
serviceName) {
+        OMElement binding = 
fac.createOMElement(WSDL2Constants.BINDING_LOCAL_NAME, wsdl);
+        binding.addAttribute(
+                fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_NAME, null, 
serviceName +
+                        Java2WSDLConstants.BINDING_NAME_SUFFIX));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.INTERFACE_LOCAL_NAME, 
null, tns
+                .getPrefix() + ":" + WSDL2Constants.DEFAULT_INTERFACE_NAME));
+
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_TYPE, null,
+                                                   
WSDL2Constants.URI_WSDL2_SOAP));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_VERSION, 
wsoap,
+                                                   
WSDL2Constants.SOAP_VERSION_1_1));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_PROTOCOL, 
wsoap,
+                                                           
WSDL2Constants.HTTP_PROTOCAL));
+        generateDefaultSOAPBindingOperations(axisService, fac, binding, wsdl, 
tns, wsoap);
+        return binding;
+    }
+
+    /**
+     * Generates a default SOAP 12 Binding for a given AxisService
+     * @param fac - The OMFactory
+     * @param axisService - The AxisService
+     * @param wsdl the WSDL namespace
+     * @param wsoap - The WSDL 2.0 SOAP namespace
+     * @param tns - The target namespace
+     * @return - The generated SOAP12Binding element
+     */
+    public static OMElement generateSOAP12Binding(OMFactory fac, AxisService 
axisService,
+                                                  OMNamespace wsdl, 
OMNamespace wsoap,
+                                                  OMNamespace tns, String 
serviceName) {
+        OMElement binding = 
fac.createOMElement(WSDL2Constants.BINDING_LOCAL_NAME, wsdl);
+        binding.addAttribute(
+                fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_NAME, null, 
serviceName +
+                        Java2WSDLConstants.SOAP12BINDING_NAME_SUFFIX));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.INTERFACE_LOCAL_NAME, 
null, tns
+                .getPrefix() + ":" + WSDL2Constants.DEFAULT_INTERFACE_NAME));
+
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_TYPE, null,
+                                                   
WSDL2Constants.URI_WSDL2_SOAP));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_VERSION, 
wsoap,
+                                                   
WSDL2Constants.SOAP_VERSION_1_2));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_PROTOCOL, 
wsoap,
+                                                           
WSDL2Constants.HTTP_PROTOCAL));
+        generateDefaultSOAPBindingOperations(axisService, fac, binding, wsdl, 
tns, wsoap);
+        return binding;
+    }
+
+    /**
+     * Generates a default HTTP Binding for a given AxisService
+     * @param fac - The OMFactory
+     * @param axisService - The AxisService
+     * @param wsdl the WSDL namespace
+     * @param whttp - The WSDL 2.0 HTTP namespace
+     * @param tns - The target namespace
+     * @return - The generated HTTPBinding element
+     */
+    public static OMElement generateHTTPBinding(OMFactory fac, AxisService 
axisService,
+                                                OMNamespace wsdl, OMNamespace 
whttp,
+                                                OMNamespace tns, String 
serviceName) {
+        OMElement binding = 
fac.createOMElement(WSDL2Constants.BINDING_LOCAL_NAME, wsdl);
+        binding.addAttribute(
+                fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_NAME, null, 
serviceName +
+                        Java2WSDLConstants.HTTP_BINDING));
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.INTERFACE_LOCAL_NAME, 
null, tns
+                .getPrefix() + ":" + WSDL2Constants.DEFAULT_INTERFACE_NAME));
+
+        
binding.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_TYPE, null,
+                                                   
WSDL2Constants.URI_WSDL2_HTTP));
+        Iterator iterator = axisService.getChildren();
+        while (iterator.hasNext()) {
+            AxisOperation axisOperation = (AxisOperation) iterator.next();
+            OMElement opElement = 
fac.createOMElement(WSDL2Constants.OPERATION_LOCAL_NAME, wsdl);
+            binding.addChild(opElement);
+            String name = axisOperation.getName().getLocalPart();
+            
opElement.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_REF, null,
+                                                         tns.getPrefix() + ":" 
+ name));
+            
opElement.addAttribute(fac.createOMAttribute(WSDL2Constants.ATTRIBUTE_LOCATION, 
whttp,
+                                                         serviceName + "/" + 
name));
+        }
+        return binding;
+    }
+
+    private static void generateDefaultSOAPBindingOperations(AxisService 
axisService,
+                                                             OMFactory 
omFactory, OMElement binding,
+                                                             OMNamespace wsdl, 
OMNamespace tns,
+                                                             OMNamespace 
wsoap) {
+        Iterator iterator = axisService.getChildren();
+        while (iterator.hasNext()) {
+            AxisOperation axisOperation = (AxisOperation) iterator.next();
+            if (axisOperation.isControlOperation()) {
+                continue;
+            }
+            OMElement opElement = 
omFactory.createOMElement(WSDL2Constants.OPERATION_LOCAL_NAME, wsdl);
+            binding.addChild(opElement);
+            String name = axisOperation.getName().getLocalPart();
+            
opElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_REF,
 null,
+                                                         tns.getPrefix() + ":" 
+ name));
+            String soapAction = axisOperation.getSoapAction();
+            if (soapAction != null) {
+                
opElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_ACTION,
 wsoap,
+                        soapAction));
+            }
+        }
+    }
+
+    /**
+     * Generates a default service element
+     * @param omFactory - The OMFactory
+     * @param wsdl the WSDL namespace
+     * @param tns - The targetnamespace
+     * @param axisService - The AxisService
+     * @param disableREST only generate REST endpoint if this is false
+     * @param disableSOAP12 only generate SOAP 1.2 endpoint if this is false
+     * @return - The generated service element
+     * @throws AxisFault - Thrown in case an exception occurs
+     */
+    public static OMElement generateServiceElement(OMFactory omFactory, 
OMNamespace wsdl,
+                                                   OMNamespace tns, 
AxisService axisService,
+                                                   boolean disableREST, 
boolean disableSOAP12,
+                                                   String serviceName)
+            throws AxisFault {
+        return generateServiceElement(omFactory, wsdl, tns, axisService, 
disableREST, disableSOAP12,
+                                      null, serviceName);
+    }
+    
+    /**
+     * Generates a default service element
+     * @param omFactory - The OMFactory
+     * @param wsdl the WSDL namespace
+     * @param tns - The targetnamespace
+     * @param axisService - The AxisService
+     * @param disableREST only generate REST endpoint if this is false
+     * @param disableSOAP12 only generate SOAP 1.2 endpoint if this is false
+     * @return - The generated service element
+     * @throws AxisFault - Thrown in case an exception occurs
+     */
+    public static OMElement generateServiceElement(OMFactory omFactory, 
OMNamespace wsdl,
+                                                   OMNamespace tns, 
AxisService axisService,
+                                                   boolean disableREST, 
boolean disableSOAP12,
+                                                   String[] eprs, String 
serviceName)
+            throws AxisFault {
+        if(eprs == null){
+            eprs = axisService.getEPRs();
+            if (eprs == null) {
+                eprs = new String[]{serviceName};
+            }
+        }
+        OMElement serviceElement;
+        serviceElement = 
omFactory.createOMElement(WSDL2Constants.SERVICE_LOCAL_NAME, wsdl);
+                    
serviceElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_NAME,
+                                                                            
null, serviceName));
+                    serviceElement.addAttribute(omFactory.createOMAttribute(
+                            WSDL2Constants.INTERFACE_LOCAL_NAME, null,
+                            tns.getPrefix() + ":" + 
WSDL2Constants.DEFAULT_INTERFACE_NAME));
+        for (int i = 0; i < eprs.length; i++) {
+            String name = "";
+            String epr = eprs[i];
+            if (epr.startsWith("https://";)) {
+                name = WSDL2Constants.DEFAULT_HTTPS_PREFIX;
+            }
+            
+            OMElement soap11EndpointElement =
+                    
omFactory.createOMElement(WSDL2Constants.ENDPOINT_LOCAL_NAME, wsdl);
+            soap11EndpointElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.ATTRIBUTE_NAME, null,
+                    name + WSDL2Constants.DEFAULT_SOAP11_ENDPOINT_NAME));
+            soap11EndpointElement.addAttribute(omFactory.createOMAttribute(
+                    WSDL2Constants.BINDING_LOCAL_NAME, null,
+                    tns.getPrefix() + ":" + serviceName +
+                            Java2WSDLConstants.BINDING_NAME_SUFFIX));
+            soap11EndpointElement.addAttribute(
+                    
omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_ADDRESS, null, epr));
+            serviceElement.addChild(soap11EndpointElement);
+            
+            OMElement soap12EndpointElement = null;
+            if (!disableSOAP12) {
+                soap12EndpointElement =
+                        
omFactory.createOMElement(WSDL2Constants.ENDPOINT_LOCAL_NAME, wsdl);
+                soap12EndpointElement.addAttribute(omFactory.createOMAttribute(
+                        WSDL2Constants.ATTRIBUTE_NAME, null,
+                        name + WSDL2Constants.DEFAULT_SOAP12_ENDPOINT_NAME));
+                soap12EndpointElement.addAttribute(omFactory.createOMAttribute(
+                        WSDL2Constants.BINDING_LOCAL_NAME, null,
+                        tns.getPrefix() + ":" + serviceName +
+                                Java2WSDLConstants.SOAP12BINDING_NAME_SUFFIX));
+                soap12EndpointElement.addAttribute(
+                        
omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_ADDRESS, null, epr));
+                serviceElement.addChild(soap12EndpointElement);
+            }
+            
+            OMElement httpEndpointElement = null;
+            if (!disableREST) {
+                httpEndpointElement =
+                        
omFactory.createOMElement(WSDL2Constants.ENDPOINT_LOCAL_NAME, wsdl);
+                httpEndpointElement.addAttribute(omFactory.createOMAttribute(
+                        WSDL2Constants.ATTRIBUTE_NAME, null,
+                        name + WSDL2Constants.DEFAULT_HTTP_ENDPOINT_NAME));
+                httpEndpointElement.addAttribute(omFactory.createOMAttribute(
+                        WSDL2Constants.BINDING_LOCAL_NAME, null,
+                        tns.getPrefix() + ":" + serviceName + 
Java2WSDLConstants
+                                .HTTP_BINDING));
+                httpEndpointElement.addAttribute(
+                        
omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_ADDRESS, null, epr));
+                serviceElement.addChild(httpEndpointElement);
+            }
+            
+            if (epr.startsWith("https://";)) {
+                OMElement soap11Documentation = 
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+                soap11Documentation.setText("This endpoint exposes a SOAP 11 
binding over a HTTPS");
+                soap11EndpointElement.addChild(soap11Documentation);
+                if (!disableSOAP12) {
+                    OMElement soap12Documentation = 
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+                    soap12Documentation.setText("This endpoint exposes a SOAP 
12 binding over a HTTPS");
+                    soap12EndpointElement.addChild(soap12Documentation);
+                }
+                if (!disableREST) {
+                    OMElement httpDocumentation =
+                            
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+                    httpDocumentation.setText("This endpoint exposes a HTTP 
binding over a HTTPS");
+                    httpEndpointElement.addChild(httpDocumentation);
+                }
+            } else if (epr.startsWith("http://";)) {
+                OMElement soap11Documentation = 
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+                soap11Documentation.setText("This endpoint exposes a SOAP 11 
binding over a HTTP");
+                soap11EndpointElement.addChild(soap11Documentation);
+                if (!disableSOAP12) {
+                    OMElement soap12Documentation = 
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+                    soap12Documentation.setText("This endpoint exposes a SOAP 
12 binding over a HTTP");
+                    soap12EndpointElement.addChild(soap12Documentation);
+                }
+                if (!disableREST) {
+                    OMElement httpDocumentation =
+                            
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+                    httpDocumentation.setText("This endpoint exposes a HTTP 
binding over a HTTP");
+                    httpEndpointElement.addChild(httpDocumentation);
+                }
+            }
+        }
+        return serviceElement;
+    }
+
+    /**
+     * Adds the namespaces to the given OMElement
+     *
+     * @param descriptionElement - The OMElement that the namespaces should be 
added to
+     * @param nameSpaceMap - The namespaceMap
+     */
+    public static void populateNamespaces(OMElement descriptionElement, Map 
nameSpaceMap) {
+        if (nameSpaceMap != null) {
+        Iterator keys = nameSpaceMap.keySet().iterator();
+        while (keys.hasNext()) {
+            String key = (String) keys.next();
+            if ("".equals(key)) {
+                descriptionElement.declareDefaultNamespace((String) 
nameSpaceMap.get(key));
+            } else {
+                descriptionElement.declareNamespace((String) 
nameSpaceMap.get(key), key);
+            }
+            }
+        }
+    }
+
+    public static void addWSAWActionAttribute(OMElement element,
+                                              String action ,
+                                              OMNamespace wsaw) {
+        if (action == null || action.length() == 0 || 
"\\\"\\\"".equals(action)) {
+            return;
+        }
+        element.addAttribute("Action", action, wsaw);
+    }
+
+    public static void addExtensionElement(OMFactory fac, OMElement element,
+                                     String name, String att1Name, String 
att1Value,
+                                     OMNamespace soapNameSpace) {
+        OMElement extElement = fac.createOMElement(name, soapNameSpace);
+        element.addChild(extElement);
+        extElement.addAttribute(att1Name, att1Value, null);
+    }
+
+    public static void addWSAddressingToBinding(String addressingFlag,
+                                                OMFactory omFactory,
+                                                OMElement bindingElement ,
+                                                OMNamespace wsaw) {
+        // Add WS-Addressing UsingAddressing element if appropriate
+        // SHOULD be on the binding element per the specification
+        if (addressingFlag.equals(AddressingConstants.ADDRESSING_OPTIONAL)) {
+            WSDLSerializationUtil.addExtensionElement(omFactory, 
bindingElement,
+                                AddressingConstants.USING_ADDRESSING,
+                                "required", "true",
+                                wsaw);
+        } else if 
(addressingFlag.equals(AddressingConstants.ADDRESSING_REQUIRED)) {
+            WSDLSerializationUtil.addExtensionElement(omFactory, 
bindingElement,
+                                AddressingConstants.USING_ADDRESSING,
+                                "required", "true",
+                                wsaw);
+        }
+    }
+
+    public static void addWSDLDocumentationElement(AxisDescription 
axisDescription,
+                                                   OMElement omElement, 
OMFactory omFactory,
+                                                   OMNamespace wsdl) {
+        OMNode documentationNode = axisDescription.getDocumentationNode();
+        OMElement documentation;
+        if (documentationNode != null) {
+            documentation = 
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
+            documentation.addChild(documentationNode);
+            omElement.addChild(documentation);
+        }
+    }
+    
+    public static void addPoliciesAsExtensibleElement(
+                       AxisDescription description, OMElement 
descriptionElement) {
+               PolicySubject policySubject = description.getPolicySubject();
+               Collection attachPolicyComponents = policySubject
+                               .getAttachedPolicyComponents();
+               ArrayList policies = new ArrayList();
+
+               for (Iterator iterator = attachPolicyComponents.iterator(); 
iterator
+                               .hasNext();) {
+                       Object policyElement = iterator.next();
+
+                       if (policyElement instanceof Policy) {
+                               policies.add(policyElement);
+
+                       } else if (policyElement instanceof PolicyReference) {
+                               String key = ((PolicyReference) 
policyElement).getURI();
+
+                               if (key.startsWith("#")) {
+                                       key = key.substring(key.indexOf("#") + 
1);
+                               }
+                               AxisService service = 
getAxisService(description);
+                               PolicyLocator locator = new 
PolicyLocator(service);
+                               Policy p = locator.lookup(key);
+
+                               if (p == null) {
+                                       throw new RuntimeException("Policy not 
found for uri : "
+                                                       + key);
+                               }
+                               policies.add(p);
+                       }
+               }
+
+               ExternalPolicySerializer filter = null;
+               if (!policies.isEmpty()) {
+                       filter = new ExternalPolicySerializer();
+                       AxisConfiguration axisConfiguration = description
+                                       .getAxisConfiguration();
+            if (axisConfiguration == null) {
+                ServerManager serverManager = ServerManager.getInstance();
+                ConfigurationContext context = serverManager.configContext;
+                if (context != null) {
+                    axisConfiguration = context.getAxisConfiguration();
+                }
+            }
+            if (axisConfiguration != null) {
+                               filter.setAssertionsToFilter(axisConfiguration
+                                               .getLocalPolicyAssertions());
+                       }
+               }
+
+               for (Iterator iterator = policies.iterator(); 
iterator.hasNext();) {
+                       Policy policy = (Policy) iterator.next();
+                       OMElement policyElement;
+                       try {
+                               policyElement = 
PolicyUtil.getPolicyComponentAsOMElement(
+                                               policy, filter);
+                       } catch (Exception ex) {
+                               throw new RuntimeException(ex);
+                       }
+                       OMNode firstChild = 
descriptionElement.getFirstOMChild();
+                       if (firstChild != null) {
+                               firstChild.insertSiblingBefore(policyElement);
+                       } else {
+                               descriptionElement.addChild(policyElement);
+                       }
+               }
+       }
+
+       private static AxisService getAxisService(AxisDescription description) {
+               if (description == null || description instanceof AxisService) {
+                       return (AxisService) description;
+               } else {
+            return getAxisService(description.getParent());
+               }
+       }
+}

_______________________________________________
Mashup-dev mailing list
[email protected]
http://mailman.wso2.org/cgi-bin/mailman/listinfo/mashup-dev

Reply via email to