You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ba...@apache.org on 2006/11/03 02:33:03 UTC

svn commit: r470629 [5/8] - in /webservices/axis2/trunk/java/modules/jaxws: src/javax/xml/ws/spi/ src/org/apache/axis2/jaxws/ src/org/apache/axis2/jaxws/client/proxy/ src/org/apache/axis2/jaxws/context/utils/ src/org/apache/axis2/jaxws/description/ src...

Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionImpl.java?view=auto&rev=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionImpl.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionImpl.java Thu Nov  2 17:33:00 2006
@@ -0,0 +1,1088 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * 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.axis2.jaxws.description;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.jws.Oneway;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebParam.Mode;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.namespace.QName;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+import javax.xml.ws.WebFault;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.axis2.description.InOnlyAxisOperation;
+import org.apache.axis2.description.InOutAxisOperation;
+import org.apache.axis2.description.OutInAxisOperation;
+import org.apache.axis2.description.OutOnlyAxisOperation;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.jaxws.description.builder.HandlerChainAnnot;
+import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite;
+import org.apache.axis2.jaxws.description.builder.OneWayAnnot;
+import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite;
+import org.apache.axis2.jaxws.description.builder.RequestWrapperAnnot;
+import org.apache.axis2.jaxws.description.builder.ResponseWrapperAnnot;
+import org.apache.axis2.jaxws.description.builder.SoapBindingAnnot;
+import org.apache.axis2.jaxws.description.builder.WebEndpointAnnot;
+import org.apache.axis2.jaxws.description.builder.WebMethodAnnot;
+import org.apache.axis2.jaxws.description.builder.WebResultAnnot;
+import org.apache.axis2.jaxws.description.builder.WebServiceContextAnnot;
+import org.apache.axis2.jaxws.description.builder.WebServiceRefAnnot;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004Constants;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants;
+
+/**
+ * An OperationDescripton corresponds to a method on an SEI.  That SEI could be explicit
+ * (i.e. WebService.endpointInterface=sei.class) or implicit (i.e. public methods on the service implementation
+ * are the contract and thus the implicit SEI).  Note that while OperationDescriptions are created on both the client
+ * and service side, implicit SEIs will only occur on the service side.
+ * 
+ * OperationDescriptons contain information that is only relevent for and SEI-based service, i.e. one that is invoked via specific
+ * methods.  This class does not exist for Provider-based services (i.e. those that specify WebServiceProvider)
+ * 
+ * <pre>
+ * <b>OperationDescription details</b>
+ * 
+ *     CORRESPONDS TO:      A single operation on an SEI (on both Client and Server)      
+ *         
+ *     AXIS2 DELEGATE:      AxisOperation
+ *     
+ *     CHILDREN:            0..n ParameterDescription
+ *                          0..n FaultDescription (Note: Not fully implemented)
+ *     
+ *     ANNOTATIONS:
+ *         WebMethod [181]
+ *         SOAPBinding [181]
+ *         Oneway [181]
+ *         WebResult [181]
+ *         RequestWrapper [224]
+ *         ResponseWrapper [224]
+ *     
+ *     WSDL ELEMENTS:
+ *         operation
+ *         
+ *  </pre>       
+ */
+
+// TODO: Axis2 does not support overloaded operations, although EndpointInterfaceDescription.addOperation() does support overloading
+//       of methods represented by OperationDescription classes.  However, the AxisOperation contained in an OperationDescription
+//       does NOT support overloaded methods.
+//
+//       While overloading is not supported by WS-I, it IS supported by JAX-WS (p11).
+//       Note that this requires support in Axis2; currently WSDL11ToAxisServiceBuilder.populateOperations does not
+//       support overloaded methods in the WSDL; the operations are stored on AxisService as children in a HashMap with the wsdl
+//       operation name as the key.
+
+// TODO: Need tests for all the "default" code paths in the annotation getters.
+// TODO: Need tests for each when annotation is not present where that is allowed by the spec. 
+class OperationDescriptionImpl implements OperationDescription, OperationDescriptionJava, OperationDescriptionWSDL {
+    private EndpointInterfaceDescription parentEndpointInterfaceDescription;
+    private AxisOperation axisOperation;
+    private QName operationName;
+    private Method seiMethod;
+    private MethodDescriptionComposite methodComposite;
+    private ParameterDescription[] parameterDescriptions;
+    private FaultDescription[] faultDescriptions;
+
+    // ===========================================
+    // ANNOTATION related information
+    // ===========================================
+    
+    // ANNOTATION: @Oneway
+    private Oneway              onewayAnnotation;
+    private Boolean             onewayIsOneway;
+    
+    // ANNOTATION: @RequestWrapper
+    private RequestWrapper      requestWrapperAnnotation;
+    private String              requestWrapperTargetNamespace;
+    private String              requestWrapperLocalName;
+    private String              requestWrapperClassName;
+    
+    // ANNOTATION: @ResponseWrapper
+    private ResponseWrapper     responseWrapperAnnotation;
+    private String              responseWrapperLocalName;
+    private String              responseWrapperTargetNamespace;
+    private String              responseWrapperClassName;
+    
+    // ANNOTATION: @SOAPBinding
+    // Note this is the Method-level annotation.  See EndpointInterfaceDescription for the Type-level annotation
+    // Also note this annotation is only allowed on methods if SOAPBinding.Style is DOCUMENT and if the method-level
+    // annotation is absent, the behavior defined on the Type is used.
+    // per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28
+    private SOAPBinding         soapBindingAnnotation;
+    // REVIEW: Should this be using the jaxws annotation values or should that be wrappered?
+    private javax.jws.soap.SOAPBinding.Style            soapBindingStyle;
+    public static final javax.jws.soap.SOAPBinding.Style SoapBinding_Style_VALID = javax.jws.soap.SOAPBinding.Style.DOCUMENT;
+    private javax.jws.soap.SOAPBinding.Use              soapBindingUse;
+    // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28
+    public static final javax.jws.soap.SOAPBinding.Use  SOAPBinding_Use_DEFAULT = javax.jws.soap.SOAPBinding.Use.LITERAL;
+    private javax.jws.soap.SOAPBinding.ParameterStyle   soapBindingParameterStyle;
+    // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28
+    public static final javax.jws.soap.SOAPBinding.ParameterStyle SOAPBinding_ParameterStyle_DEFAULT = javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED;
+
+    // ANNOTATION: @WebMethod
+    private WebMethod           webMethodAnnotation;
+    private String              webMethodOperationName;
+    // Default value per JSR-181 MR Sec 4.2, pg 17
+    public static final String  WebMethod_Action_DEFAULT = "";
+    private String              webMethodAction;
+    // Default value per JSR-181 MR sec 4.2, pg 17
+    public static final Boolean WebMethod_Exclude_DEFAULT = new Boolean(false);
+    private Boolean             webMethodExclude;
+    
+    // ANNOTATION: @WebParam
+    private String[]            webParamNames;
+    private Mode[]              webParamMode;
+    private String[]            webParamTargetNamespace;
+
+    
+    // ANNOTATION: @WebResult
+    private WebResult           webResultAnnotation;
+    private String              webResultName;
+    private String              webResultPartName;
+    // Default value per JSR-181 MR Sec 4.5.1, pg 23
+    public static final String  WebResult_TargetNamespace_DEFAULT = "";
+    private String              webResultTargetNamespace;
+    // Default value per JSR-181 MR sec 4.5, pg 24
+    public static final Boolean WebResult_Header_DEFAULT = new Boolean(false);
+    private Boolean             webResultHeader;
+
+    OperationDescriptionImpl(Method method, EndpointInterfaceDescription parent) {
+        // TODO: Look for WebMethod anno; get name and action off of it
+        parentEndpointInterfaceDescription = parent;
+        setSEIMethod(method);
+
+        
+        this.operationName = new QName(getOperationName());
+    }
+    
+    OperationDescriptionImpl(AxisOperation operation, EndpointInterfaceDescription parent) {
+        parentEndpointInterfaceDescription = parent;
+        axisOperation = operation;
+        this.operationName = axisOperation.getName();
+    }
+
+    OperationDescriptionImpl(MethodDescriptionComposite mdc, EndpointInterfaceDescription parent) {
+
+        parentEndpointInterfaceDescription = parent;
+        methodComposite = mdc;
+        this.operationName = new QName(getOperationName());
+        webMethodAnnotation = methodComposite.getWebMethodAnnot();
+
+        AxisOperation axisOperation = null;
+        
+        try {
+            if (isOneWay()) {               
+                axisOperation = AxisOperationFactory.getOperationDescription(WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY);
+            } else {
+                axisOperation = AxisOperationFactory.getOperationDescription(WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT);
+            }
+            //TODO: There are several other MEP's, such as: OUT_ONLY, IN_OPTIONAL_OUT, OUT_IN, OUT_OPTIONAL_IN, ROBUST_OUT_ONLY,
+            //                                              ROBUST_IN_ONLY
+            //      Determine how these MEP's should be handled, if at all
+                    
+        } catch (Exception e) {
+            AxisFault ex = new AxisFault("OperationDescriptionImpl:cons - unable to build AxisOperation ");
+        }
+            
+        if (axisOperation != null){
+            
+            axisOperation.setName(determineOperationQName(this.methodComposite));
+            axisOperation.setSoapAction(this.getAction());
+
+        
+            //TODO: Determine other axisOperation values that may need to be set
+            //      Currently, the following values are being set on AxisOperation in 
+            //      ServiceBuilder.populateService which we are not setting:
+            //          AxisOperation.setPolicyInclude()
+            //          AxisOperation.setWsamappingList()
+            //          AxisOperation.setOutputAction()
+            //          AxisOperation.addFaultAction()
+            //          AxisOperation.setFaultMessages()
+            
+            // TODO: The WSMToAxisServiceBuilder sets the message receiver, not sure why this is done
+            //       since AxisService.addOperation does this as well by setting it to a default
+            //       MessageReceiver...it appears that this code is also setting it to a default
+            //       receiver..need to understand this
+
+            /*
+            String messageReceiverClass = "org.apache.axis2.rpc.receivers.RPCMessageReceiver";
+            if(wsmOperation.isOneWay()){
+                messageReceiverClass = "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver";
+            }
+            try{
+                MessageReceiver msgReceiver = (MessageReceiver)Class.forName(messageReceiverClass).newInstance();
+                axisOperation.setMessageReceiver(msgReceiver);
+
+            }catch(Exception e){
+            }
+            */
+
+            parameterDescriptions = createParameterDescriptions();
+            faultDescriptions = createFaultDescriptions();
+            
+            //TODO: Need to process the other annotations that can exist, on the server side
+            //      and at the method level.
+            //      They are, as follows:       
+            //          WebResultAnnot (181)
+            //          HandlerChain
+            //          SoapBinding (181)
+            //          WebServiceRefAnnot (List) (JAXWS)
+            //          WebServiceContextAnnot (JAXWS via injection)
+            //          RequestWrapper (JAXWS)
+            //          ResponseWrapper (JAXWS)
+            
+//System.out.println("OperationDescription: Finished setting operation");
+            
+        }
+        
+        this.axisOperation = axisOperation;
+    }
+    
+    void setSEIMethod(Method method) {
+        if (seiMethod != null) {
+            // TODO: This is probably an error, but error processing logic is incorrect
+            throw new UnsupportedOperationException("Can not set an SEI method once it has been set.");
+        }
+        else  {
+            seiMethod = method;
+            webMethodAnnotation = seiMethod.getAnnotation(WebMethod.class);
+            parameterDescriptions = createParameterDescriptions();
+            faultDescriptions = createFaultDescriptions();
+        }
+    }
+
+    public EndpointInterfaceDescription getEndpointInterfaceDescription() {
+        return parentEndpointInterfaceDescription;
+    }
+    
+    public AxisOperation getAxisOperation() {
+        return axisOperation;
+    }
+    
+    public QName getName() {
+        return operationName;
+    }
+    
+    // Java-related getters
+    public String getJavaMethodName() {
+        String returnString = null;
+        
+        if (!isDBC()) {
+            if (seiMethod != null) {
+                returnString = seiMethod.getName();
+            }
+        } else {
+            if (methodComposite != null) {
+                returnString = methodComposite.getMethodName();
+            }
+        }
+        
+        return returnString;
+    }
+    
+    public String[] getJavaParameters() {
+        
+        ArrayList<String> returnParameters = new ArrayList<String>();
+        
+        if (!isDBC()) {
+            if (seiMethod != null) {
+                Class[] paramaters = seiMethod.getParameterTypes();
+                for (Class param:paramaters) {
+                    returnParameters.add(param.getName());
+                }
+            }
+    
+        } 
+        else {
+            if (methodComposite != null) {
+                
+                Iterator<ParameterDescriptionComposite> iter = 
+                    methodComposite.getParameterDescriptionCompositeList().iterator();
+                while (iter.hasNext()) {
+                    returnParameters.add(iter.next().getParameterType());
+                }
+            }
+        }
+        
+        // TODO: This is different than the rest, which return null instead of an empty array
+        return returnParameters.toArray(new String[0]);
+    }
+    /**
+     * Note this will return NULL unless the operation was built via introspection on the SEI.
+     * In other words, it will return null if the operation was built with WSDL.
+     * @return
+     */
+    public Method getSEIMethod() {
+        return seiMethod;
+    }
+    
+    MethodDescriptionComposite getMethodDescriptionComposite() {
+        return methodComposite;
+    }
+    
+    private boolean isWrappedParameters() {
+        return getSoapBindingParameterStyle() == javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED;
+    }
+    
+    private ParameterDescription[] createParameterDescriptions() {
+        
+        ArrayList<ParameterDescription> buildParameterList = new ArrayList<ParameterDescription>();
+    
+        if (!isDBC()) {
+            Class[] parameters = seiMethod.getParameterTypes();
+            Type[] paramaterTypes = seiMethod.getGenericParameterTypes();
+            Annotation[][] annotations = seiMethod.getParameterAnnotations();
+            
+            for(int i = 0; i < parameters.length; i++) {
+                ParameterDescription paramDesc = new ParameterDescriptionImpl(i, parameters[i], paramaterTypes[i], annotations[i], this);
+                buildParameterList.add(paramDesc);
+            }
+    
+        } else {
+            ParameterDescriptionComposite pdc = null;
+            Iterator<ParameterDescriptionComposite> iter = 
+                                methodComposite.getParameterDescriptionCompositeList().iterator();
+            
+            for (int i = 0; i < methodComposite.getParameterDescriptionCompositeList().size(); i++) {
+                ParameterDescription paramDesc = 
+                                new ParameterDescriptionImpl(  i, 
+                                                            methodComposite.getParameterDescriptionComposite(i), 
+                                                            this);
+                buildParameterList.add(paramDesc);
+            }
+        }
+        
+        return buildParameterList.toArray(new ParameterDescription[buildParameterList.size()]);
+    
+    }
+
+    private FaultDescription[] createFaultDescriptions() {
+        
+        ArrayList<FaultDescription> buildFaultList = new ArrayList<FaultDescription>();
+        
+        if (!isDBC()) {
+            // get exceptions this method "throws"
+            Class[] webFaultClasses = seiMethod.getExceptionTypes();
+
+            for(Class wfClass:webFaultClasses) {
+                for (Annotation anno:wfClass.getAnnotations()) {
+                    if (anno.annotationType() == WebFault.class) {
+                        buildFaultList.add(new FaultDescriptionImpl(wfClass.getCanonicalName(), ((WebFault)anno).faultBean(), (WebFault)anno, this));
+                    }
+                }
+            }
+        } else {
+            // TODO do I care about methodComposite like the paramDescription does?
+        }
+        return buildFaultList.toArray(new FaultDescription[0]);
+    }
+    
+    // =====================================
+    // ANNOTATION: WebMethod
+    // =====================================
+    WebMethod getWebMethod() {
+        return webMethodAnnotation;
+    }
+    
+    static QName determineOperationQName(Method javaMethod) {
+        return new QName(determineOperationName(javaMethod));
+    }
+    
+    //TODO: For now, we are overriding the above method only because it is static, these should
+    //be combined at some point
+    static QName determineOperationQName(MethodDescriptionComposite mdc) {
+        return new QName(determineOperationName(mdc));
+    }
+    
+    //TODO: Deprecate this after we use only DBC objects
+    private static String determineOperationName(Method javaMethod) {
+        
+        String operationName = null;
+        
+        WebMethod wmAnnotation = javaMethod.getAnnotation(WebMethod.class);
+        // Per JSR-181 MR Sec 4.2 "Annotation: javax.jws.WebMethod" pg 17,
+        // if @WebMethod specifies and operation name, use that.  Otherwise
+        // default is the Java method name
+        if (wmAnnotation != null && !DescriptionUtils.isEmpty(wmAnnotation.operationName())) {
+            operationName = wmAnnotation.operationName();
+        }
+        else {
+            operationName = javaMethod.getName();
+        }
+        
+        return operationName;    
+    }
+
+    //TODO: For now, we are overriding the above method only because it is static, these should
+    //be combined at some point
+    private static String determineOperationName(MethodDescriptionComposite mdc) {
+        String operationName = null;
+        
+        WebMethod wmAnnotation = mdc.getWebMethodAnnot();
+        if (wmAnnotation != null && !DescriptionUtils.isEmpty(wmAnnotation.operationName())) {
+            operationName = wmAnnotation.operationName();
+        }
+        else {
+            operationName = mdc.getMethodName();
+        }
+
+        return operationName;
+    }
+    
+    public String getOperationName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebMethodOperationName();
+    }
+    public String getAnnoWebMethodOperationName() {
+        if (webMethodOperationName == null) {
+            if (!isDBC())
+                webMethodOperationName = determineOperationName(seiMethod);
+            else
+                webMethodOperationName = determineOperationName(methodComposite);       
+        }
+        return webMethodOperationName;
+    }
+    
+    public String getAction() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebMethodAction();
+    }
+    
+    public String getAnnoWebMethodAction() {
+        if (webMethodAction == null) {
+            if (getWebMethod() != null && !DescriptionUtils.isEmpty(getWebMethod().action())) {
+                webMethodAction = getWebMethod().action();
+            }
+            else {
+                webMethodAction = WebMethod_Action_DEFAULT;
+            }
+        }
+        return webMethodAction;
+    }
+    
+    public boolean isExcluded() {
+        // TODO: (JLB) WSDL/Annotation merge
+        return getAnnoWebMethodExclude();
+    }
+    public boolean getAnnoWebMethodExclude() {
+        if (webMethodExclude == null) {
+            // TODO: Validation: if this attribute specified, no other elements allowed per JSR-181 MR Sec 4.2, pg 17
+            // TODO: Validation: This element is not allowed on endpoint interfaces
+            // Unlike the elements with a String value, if the annotation is present, exclude will always 
+            // return a usable value since it will default to FALSE if the element is not present.
+            if (getWebMethod() != null) {
+                webMethodExclude = new Boolean(getWebMethod().exclude());
+            }
+            else {
+                webMethodExclude = WebMethod_Exclude_DEFAULT;
+            }
+        }
+        
+        return webMethodExclude.booleanValue();
+    }
+    
+    // ==========================================
+    // ANNOTATION: RequestWrapper
+    // ==========================================
+    RequestWrapper getRequestWrapper() {
+        if (requestWrapperAnnotation == null) {
+            if (!isDBC()) {
+                requestWrapperAnnotation = seiMethod.getAnnotation(RequestWrapper.class); 
+            } else {
+                requestWrapperAnnotation = methodComposite.getRequestWrapperAnnot(); 
+            }       
+        }
+        return requestWrapperAnnotation;
+    }
+    
+    public String getRequestWrapperLocalName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoRequestWrapperLocalName();
+    }
+    
+    /**
+     * For wrapped parameter style (based on the annotation and the WSDL), returns the 
+     * wrapper value.  For non-wrapped (i.e. bare) parameter style, returns null.
+     * @return
+     */
+    public String getAnnoRequestWrapperLocalName() {
+        if (!isWrappedParameters()) {
+            // A wrapper is only meaningful for wrapped parameters
+            return null;
+        }
+        if (requestWrapperLocalName == null) {
+            if (getRequestWrapper() != null
+                    && !DescriptionUtils.isEmpty(getRequestWrapper().localName())) {
+                requestWrapperLocalName = getRequestWrapper().localName();
+            } else {
+                // The default value of localName is the value of operationName as
+                // defined in the WebMethod annotation. [JAX-WS Sec. 7.3, p. 80]
+                requestWrapperLocalName = getAnnoWebMethodOperationName();
+            }
+        }
+        return requestWrapperLocalName;
+    }
+    public String getRequestWrapperTargetNamespace() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoRequestWrapperTargetNamespace();
+    }
+    /**
+     * For wrapped parameter style (based on the annotation and the WSDL), returns the 
+     * wrapper value.  For non-wrapped (i.e. bare) parameter style, returns null.
+     * @return
+     */
+    public String getAnnoRequestWrapperTargetNamespace() {
+        if (!isWrappedParameters()) {
+            // A wrapper is only meaningful for wrapped parameters
+            return null;
+        }
+        if (requestWrapperTargetNamespace == null) {
+            if (getRequestWrapper() != null && !DescriptionUtils.isEmpty(getRequestWrapper().targetNamespace())) {
+                requestWrapperTargetNamespace = getRequestWrapper().targetNamespace();
+            }
+            else {
+                // The default value for targetNamespace is the target namespace of the SEI. [JAX-WS Sec 7.3, p. 80]
+                // TODO: Implement getting the TNS from the SEI 
+//                requestWrapperTargetNamespace = getEndpointInterfaceDescription().getWebServiceTargetNamespace();
+                throw new UnsupportedOperationException("RequestWrapper.targetNamespace default not implented yet");            }
+        }
+        return requestWrapperTargetNamespace;
+    }
+    
+    public String getRequestWrapperClassName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoRequestWrapperClassName();
+    }
+    /**
+     * For wrapped parameter style (based on the annotation and the WSDL), returns the 
+     * wrapper value.  For non-wrapped (i.e. bare) parameter style, returns null.
+     * @return
+     */
+    public String getAnnoRequestWrapperClassName() {
+        if (!isWrappedParameters()) {
+            // A wrapper is only meaningful for wrapped parameters
+            return null;
+        }
+        if (requestWrapperClassName == null) {
+            if (getRequestWrapper() != null && !DescriptionUtils.isEmpty(getRequestWrapper().className())) {
+                requestWrapperClassName = getRequestWrapper().className();
+            }
+            else {
+                // Not sure what the default value should be (if any).  None is listed in Sec. 7.3 on p. 80 of
+                // the JAX-WS spec, BUT Conformance(Using javax.xml.ws.RequestWrapper) in Sec 2.3.1.2 on p. 13
+                // says the entire annotation "...MAY be omitted if all its properties would have default vaules."
+                // implying there IS some sort of default.  We'll try this for now:
+                if (isDBC()) {
+                    requestWrapperClassName = this.methodComposite.getDeclaringClass(); 
+                } else {
+                    Class clazz = seiMethod.getDeclaringClass();
+                    String packageName = clazz.getPackage().getName();
+                    String className = DescriptionUtils.javaMethodtoClassName(seiMethod.getName());
+                    requestWrapperClassName = packageName + "." + className;
+                }
+            }
+        }
+        return requestWrapperClassName;
+    }
+    
+    // ===========================================
+    // ANNOTATION: ResponseWrapper
+    // ===========================================
+    ResponseWrapper getResponseWrapper() {
+        if (responseWrapperAnnotation == null) {
+            if (!isDBC()) {
+                responseWrapperAnnotation = seiMethod.getAnnotation(ResponseWrapper.class);
+            } else {
+                responseWrapperAnnotation = methodComposite.getResponseWrapperAnnot();              
+            }
+        }
+        return responseWrapperAnnotation;
+    }
+    public String getResponseWrapperLocalName() {
+        return getAnnoResponseWrapperLocalName();
+    }
+    /**
+     * For wrapped parameter style (based on the annotation and the WSDL), returns the 
+     * wrapper value.  For non-wrapped (i.e. bare) parameter style, returns null.
+     * @return
+     */
+    public String getAnnoResponseWrapperLocalName() {
+        if (!isWrappedParameters()) {
+            // A wrapper is only meaningful for wrapped parameters
+            return null;
+        }
+        if (responseWrapperLocalName == null) {
+            if (getResponseWrapper() != null && !DescriptionUtils.isEmpty(getResponseWrapper().localName())) {
+                responseWrapperLocalName = getResponseWrapper().localName();
+            }
+            else { 
+                // The default value of localName is the value of operationName as 
+                // defined in the WebMethod annotation appended with "Response". [JAX-WS Sec. 7.4, p. 81]
+                responseWrapperLocalName = getAnnoWebMethodOperationName() + "Response";
+            }
+        }
+        return responseWrapperLocalName;
+    }
+    
+    public String getResponseWrapperTargetNamespace() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoResponseWrapperTargetNamespace();
+    }
+    /**
+     * For wrapped parameter style (based on the annotation and the WSDL), returns the 
+     * wrapper value.  For non-wrapped (i.e. bare) parameter style, returns null.
+     * @return
+     */
+    public String getAnnoResponseWrapperTargetNamespace() {
+        if (!isWrappedParameters()) {
+            // A wrapper is only meaningful for wrapped parameters
+            return null;
+        }
+        if (responseWrapperTargetNamespace == null) {
+            if (getResponseWrapper() != null && !DescriptionUtils.isEmpty(getResponseWrapper().targetNamespace())) {
+                responseWrapperTargetNamespace = getResponseWrapper().targetNamespace();
+            }
+            else {
+                // The default value for targetNamespace is the target namespace of the SEI. [JAX-WS Sec 7.3, p. 80]
+                // TODO: Implement getting the TNS from the SEI 
+//                responseWrapperTargetNamespace = getEndpointInterfaceDescription().getWebServiceTargetNamespace();
+                throw new UnsupportedOperationException("RequestWrapper.targetNamespace default not implented yet");
+            }
+        }
+        return responseWrapperTargetNamespace;
+    }
+    
+    public String getResponseWrapperClassName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoResponseWrapperClassName();
+    }
+    /**
+     * For wrapped parameter style (based on the annotation and the WSDL), returns the 
+     * wrapper value.  For non-wrapped (i.e. bare) parameter style, returns null.
+     * @return
+     */
+    public String getAnnoResponseWrapperClassName() {
+        if (!isWrappedParameters()) {
+            // A wrapper is only meaningful for wrapped parameters
+            return null;
+        }
+        if (responseWrapperClassName == null) {
+            if (getResponseWrapper() != null && !DescriptionUtils.isEmpty(getResponseWrapper().className())) {
+                responseWrapperClassName = getResponseWrapper().className();
+            }
+            else {
+                // Not sure what the default value should be (if any).  None is listed in Sec. 7.4 on p. 81 of
+                // the JAX-WS spec, BUT Conformance(Using javax.xml.ws.ResponseWrapper) in Sec 2.3.1.2 on p. 13
+                // says the entire annotation "...MAY be omitted if all its properties would have default vaules."
+                // implying there IS some sort of default.  We'll try this for now:
+                if (!isDBC()) {
+                    Class clazz = seiMethod.getDeclaringClass();
+                    String packageName = clazz.getPackage().getName();
+                    String className = DescriptionUtils.javaMethodtoClassName(seiMethod.getName());
+                    responseWrapperClassName = packageName + "." + className;
+                } else {
+                    responseWrapperClassName = methodComposite.getDeclaringClass();
+                }
+            }
+        }
+        return responseWrapperClassName;
+    }
+
+    
+    // ===========================================
+    // ANNOTATION: WebFault
+    // ===========================================
+
+    /*
+     * TODO some of the WebFault stuff should be moved to FaultDescription
+     */
+    
+    /*
+     *  TODO:  this will need revisited.  The problem is that a WebFault is not mapped 1:1 to an
+     *  OperationDescription.  We should do a better job caching the information.  For now, I'm
+     *  following the getWebParam() pattern.
+     *  
+     *  This is gonna get complicated.  One other thing to consider is that a method (opdesc) may declare
+     *  several types of exceptions it throws
+     *  
+     */
+    
+    public FaultDescription[] getFaultDescriptions() {
+        return faultDescriptions;
+    }
+    
+    public FaultDescription resolveFaultByFaultBeanName(String faultBeanName) {
+        for(FaultDescription fd: faultDescriptions) {
+            if (faultBeanName.equals(fd.getBeanName()))
+                return fd;
+        }
+        return null;
+    }
+    
+    public FaultDescription resolveFaultByExceptionName(String exceptionClassName) {
+        for(FaultDescription fd: faultDescriptions) {
+            if (exceptionClassName.equals(fd.getExceptionClassName()))
+                return fd;
+        }
+        return null;
+    }
+    
+    // ===========================================
+    // ANNOTATION: WebParam
+    // ===========================================
+    // Note that this annotation is handled by the ParameterDescripton.
+    // Methods are provided on OperationDescription as convenience methods.
+    public ParameterDescription[] getParameterDescriptions() {
+        return parameterDescriptions;
+    }
+    
+    public ParameterDescription getParameterDescription(String parameterName) {
+        // TODO: Validation: For BARE paramaterUse, only a single IN our INOUT paramater and a single output (either return or OUT or INOUT) is allowed 
+        //       Per JSR-224, Sec 3.6.2.2, pg 37
+        ParameterDescription matchingParamDesc = null;
+        if (parameterName != null && !parameterName.equals("")) {
+            for (ParameterDescription paramDesc:parameterDescriptions) {
+                if (parameterName.equals(paramDesc.getParameterName())) {
+                    matchingParamDesc = paramDesc;
+                    break;
+                }
+            }
+        }
+        return matchingParamDesc;
+    }
+    
+    public ParameterDescription getParameterDescription(int parameterNumber) {
+        return parameterDescriptions[parameterNumber];
+    }
+    
+    public String[] getParamNames() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebParamNames();
+    }
+    public String[] getAnnoWebParamNames() {
+        if (webParamNames == null) {
+            ArrayList<String> buildNames = new ArrayList<String>();
+            ParameterDescription[] paramDescs = getParameterDescriptions();
+            for (ParameterDescription currentParamDesc:paramDescs) {
+                buildNames.add(currentParamDesc.getParameterName());
+            }
+            webParamNames = buildNames.toArray(new String[0]);
+        }
+        return webParamNames;
+    }
+    
+    public String[] getAnnoWebParamTargetNamespaces(){
+        if (webParamTargetNamespace == null) {
+            ArrayList<String> buildTargetNS = new ArrayList<String>();
+            ParameterDescription[] paramDescs = getParameterDescriptions();
+            for (ParameterDescription currentParamDesc:paramDescs) {
+                buildTargetNS.add(currentParamDesc.getTargetNamespace());
+            }
+            webParamTargetNamespace = buildTargetNS.toArray(new String[0]);
+        }
+        return webParamTargetNamespace;
+    }
+
+    public String getAnnoWebParamTargetNamespace(String name){
+        String returnTargetNS = null;
+        ParameterDescription paramDesc = getParameterDescription(name);
+        if (paramDesc != null) {
+            returnTargetNS = paramDesc.getTargetNamespace();
+        }
+        return returnTargetNS;
+    }
+    
+             
+    public Mode[] getAnnoWebParamModes(){
+        if(webParamMode == null){
+            ArrayList<Mode> buildModes = new ArrayList<Mode>();
+            ParameterDescription[] paramDescs = getParameterDescriptions();
+            for (ParameterDescription currentParamDesc:paramDescs) {
+                // TODO: (JLB) Consider new ParamDesc.Mode vs WebParam.Mode
+                buildModes.add(((ParameterDescriptionJava) currentParamDesc).getAnnoWebParamMode());
+            }
+             webParamMode = buildModes.toArray(new Mode[0]);
+        }
+        return webParamMode;
+    }
+    public boolean isAnnoWebParamHeader(String name){
+        ParameterDescription paramDesc = getParameterDescription(name);
+        if (paramDesc != null) {
+            return paramDesc.isHeader();
+        }
+        return false;    
+    }
+    
+    // ===========================================
+    // ANNOTATION: WebResult
+    // ===========================================
+    public WebResult getAnnoWebResult() {
+        if (webResultAnnotation == null) {
+            if (!isDBC()) {
+                webResultAnnotation = seiMethod.getAnnotation(WebResult.class);
+            } else {
+                webResultAnnotation = methodComposite.getWebResultAnnot();
+            }
+            
+        }
+        return webResultAnnotation;
+    }
+    
+    public boolean isWebResultAnnotationSpecified() {
+        return getAnnoWebResult() != null;
+    }
+
+    public boolean isOperationReturningResult() {
+        boolean isResult = false;
+        if (!isAnnoOneWay()) {
+            if (!isDBC()) {
+                if (seiMethod.getReturnType() != Void.TYPE) {
+                    isResult = true;
+                }
+            } else {
+                if (!DescriptionUtils.isEmpty(methodComposite.getReturnType()) &&
+                        !methodComposite.getReturnType().equals("void"))
+                    isResult = true;
+            }
+        } 
+        return isResult;
+    }
+
+    public String getResultName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebResultName();
+    }
+    
+    public String getAnnoWebResultName() {
+        if (!isOperationReturningResult()) {
+            return null;
+        }
+        if (webResultName == null) {
+            if (getAnnoWebResult() != null && !DescriptionUtils.isEmpty(getAnnoWebResult().name())) {
+                webResultName = getAnnoWebResult().name();
+            }
+            else if (getAnnoSoapBindingStyle() == SOAPBinding.Style.DOCUMENT
+                    && getAnnoSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.BARE) {
+                // Default for operation style DOCUMENT and paramater style BARE per JSR 181 MR Sec 4.5.1, pg 23
+                webResultName = getAnnoWebMethodOperationName() + "Response";
+                
+            }
+            else {
+                // Defeault value is "return" per JSR-181 MR Sec. 4.5.1, p. 22
+                webResultName = "return";
+            }
+        }
+        return webResultName;
+    }
+    
+    public String getResultPartName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebResultPartName();
+    }
+    public String getAnnoWebResultPartName() {
+        if (!isOperationReturningResult()) {
+            return null;
+        }
+        if (webResultPartName == null) {
+            if (getAnnoWebResult() != null && !DescriptionUtils.isEmpty(getAnnoWebResult().partName())) {
+                webResultPartName = getAnnoWebResult().partName();
+            }
+            else {
+                // Default is the WebResult.name per JSR-181 MR Sec 4.5.1, pg 23
+                webResultPartName = getAnnoWebResultName();
+            }
+        }
+        return webResultPartName;
+    }
+    
+    public String getResultTargetNamespace() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebResultTargetNamespace();
+    }
+    public String getAnnoWebResultTargetNamespace() {
+        if (!isOperationReturningResult()) {
+            return null;
+        }
+        if (webResultTargetNamespace == null) {
+            if (getAnnoWebResult() != null && !DescriptionUtils.isEmpty(getAnnoWebResult().targetNamespace())) {
+                webResultTargetNamespace = getAnnoWebResult().targetNamespace();
+            }
+            else if (getAnnoSoapBindingStyle() == SOAPBinding.Style.DOCUMENT
+                    && getAnnoSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.WRAPPED
+                    && !getAnnoWebResultHeader()) {
+                // Default for operation style DOCUMENT and paramater style WRAPPED and the return value
+                // does not map to a header per JSR-181 MR Sec 4.5.1, pg 23-24
+                webResultTargetNamespace = WebResult_TargetNamespace_DEFAULT;
+            }
+            else {
+                // Default is the namespace from the WebService per JSR-181 MR Sec 4.5.1, pg 23-24
+                webResultTargetNamespace = ((EndpointDescriptionJava) getEndpointInterfaceDescription().getEndpointDescription()).getAnnoWebServiceTargetNamespace();
+            }
+            
+        }
+        return webResultTargetNamespace;
+    }
+    
+    public boolean isResultHeader() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebResultHeader();
+    }
+    public boolean getAnnoWebResultHeader() {
+        if (!isOperationReturningResult()) {
+            return false;
+        }
+        if (webResultHeader == null) {
+            if (getAnnoWebResult() != null) {
+                // Unlike the elements with a String value, if the annotation is present, exclude will always 
+                // return a usable value since it will default to FALSE if the element is not present.
+                webResultHeader = new Boolean(getAnnoWebResult().header());
+            }
+            else {
+                webResultHeader = WebResult_Header_DEFAULT;
+            }
+        }
+        return webResultHeader.booleanValue();
+    }
+
+    // ===========================================
+    // ANNOTATION: SOAPBinding
+    // ===========================================
+    public SOAPBinding getAnnoSoapBinding() {
+        // TODO: VALIDATION: Only style of DOCUMENT allowed on Method annotation; remember to check the Type's style setting also
+        //       JSR-181 Sec 4.7 p. 28
+        if (soapBindingAnnotation == null) {
+            if (!isDBC()) {
+                soapBindingAnnotation = seiMethod.getAnnotation(SOAPBinding.class);
+            } else {
+                soapBindingAnnotation = methodComposite.getSoapBindingAnnot();
+            }
+        }
+        return soapBindingAnnotation;
+    }
+    public javax.jws.soap.SOAPBinding.Style getSoapBindingStyle() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoSoapBindingStyle();
+    }
+    public javax.jws.soap.SOAPBinding.Style getAnnoSoapBindingStyle() {
+        if (soapBindingStyle == null) {
+            if (getAnnoSoapBinding() != null && getAnnoSoapBinding().style() != null) {
+                soapBindingStyle = getAnnoSoapBinding().style();
+            }
+            else {
+                // Per JSR-181 MR Sec 4.7, pg 28: if not specified, use the Type value.
+                soapBindingStyle = getEndpointInterfaceDescription().getSoapBindingStyle(); 
+            }
+        }
+        return soapBindingStyle;
+    }
+    
+    public javax.jws.soap.SOAPBinding.Use getSoapBindingUse() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoSoapBindingUse();
+    }
+    public javax.jws.soap.SOAPBinding.Use getAnnoSoapBindingUse() {
+        if (soapBindingUse == null) {
+            if (getAnnoSoapBinding() != null && getAnnoSoapBinding().use() != null) {
+                soapBindingUse = getAnnoSoapBinding().use();
+            }
+            else {
+                // Per JSR-181 MR Sec 4.7, pg 28: if not specified, use the Type value.
+                soapBindingUse = getEndpointInterfaceDescription().getSoapBindingUse(); 
+            }
+        }
+        return soapBindingUse;
+    }
+
+    public javax.jws.soap.SOAPBinding.ParameterStyle getSoapBindingParameterStyle() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoSoapBindingParameterStyle();
+    }
+    public javax.jws.soap.SOAPBinding.ParameterStyle getAnnoSoapBindingParameterStyle() {
+        if (soapBindingParameterStyle == null) {
+            if (getAnnoSoapBinding() != null && getAnnoSoapBinding().use() != null) {
+                soapBindingParameterStyle = getAnnoSoapBinding().parameterStyle();
+            }
+            else {
+                // Per JSR-181 MR Sec 4.7, pg 28: if not specified, use the Type value.
+                soapBindingParameterStyle = getEndpointInterfaceDescription().getSoapBindingParameterStyle(); 
+            }
+        }
+        return soapBindingParameterStyle;
+    }
+    
+    // ===========================================
+    // ANNOTATION: OneWay
+    // ===========================================
+    Oneway getOnewayAnnotation() {
+        //TODO: Shouldn't really do it this way...if there is not Oneway annotation, 
+        //      we will always be calling the methods to try to retrieve it, since
+        //      it will always be null, should consider relying on 'isOneWay'
+        
+        if (onewayAnnotation == null) {         
+            if (isDBC()) {
+                if (methodComposite.isOneWay()) {
+                    onewayAnnotation = OneWayAnnot.createOneWayAnnotImpl();
+                }
+            } else
+                onewayAnnotation = seiMethod.getAnnotation(Oneway.class);
+        }
+        return onewayAnnotation;
+    }
+
+    public boolean isOneWay() {
+        // TODO: (JLB) WSDL/Anno merge
+        return isAnnoOneWay();
+    }
+    
+    public boolean isAnnoOneWay() {
+        if (onewayIsOneway == null) {
+            if (getOnewayAnnotation() != null) {
+                // The presence of the annotation indicates the method is oneway
+                onewayIsOneway = new Boolean(true);
+            }
+            else {
+                // If the annotation is not present, the default is this is NOT a One Way method
+                onewayIsOneway = new Boolean(false);
+            }
+        }
+        return onewayIsOneway.booleanValue();   
+    }
+    
+    private boolean isDBC() {
+        if (methodComposite != null)
+            return true;
+        else
+            return false;
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionJava.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionJava.java?view=auto&rev=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionJava.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionJava.java Thu Nov  2 17:33:00 2006
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * 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.axis2.jaxws.description;
+
+import javax.jws.WebResult;
+import javax.jws.WebParam.Mode;
+import javax.jws.soap.SOAPBinding;
+
+public interface OperationDescriptionJava {
+    
+    public WebResult getAnnoWebResult();
+    public String getAnnoRequestWrapperClassName();
+    public String getAnnoRequestWrapperLocalName();
+    public String getAnnoRequestWrapperTargetNamespace();
+    
+    public String getAnnoResponseWrapperClassName();
+    public String getAnnoResponseWrapperLocalName();
+    public String getAnnoResponseWrapperTargetNamespace();
+    
+    public SOAPBinding getAnnoSoapBinding();
+    public javax.jws.soap.SOAPBinding.ParameterStyle getAnnoSoapBindingParameterStyle();
+    public javax.jws.soap.SOAPBinding.Style getAnnoSoapBindingStyle();
+    public javax.jws.soap.SOAPBinding.Use getAnnoSoapBindingUse();
+    
+    public String getAnnoWebMethodAction();
+    public boolean getAnnoWebMethodExclude();
+    public String getAnnoWebMethodOperationName();
+
+    public Mode[] getAnnoWebParamModes();
+    public String[] getAnnoWebParamNames();
+    public String getAnnoWebParamTargetNamespace(String name);
+    public String[] getAnnoWebParamTargetNamespaces();
+    public boolean isAnnoWebParamHeader(String name);
+    
+    public boolean isWebResultAnnotationSpecified();
+    public boolean getAnnoWebResultHeader();
+    public String getAnnoWebResultName();
+    public String getAnnoWebResultPartName();
+    public String getAnnoWebResultTargetNamespace();
+    
+    public boolean isAnnoOneWay();
+    
+}
\ No newline at end of file

Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionWSDL.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionWSDL.java?view=auto&rev=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionWSDL.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/OperationDescriptionWSDL.java Thu Nov  2 17:33:00 2006
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * 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.axis2.jaxws.description;
+
+public interface OperationDescriptionWSDL {
+    
+}
\ No newline at end of file

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescription.java?view=diff&rev=470629&r1=470628&r2=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescription.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescription.java Thu Nov  2 17:33:00 2006
@@ -17,248 +17,24 @@
 
 
 package org.apache.axis2.jaxws.description;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.GenericDeclaration;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
 import javax.jws.WebParam;
-import javax.jws.soap.SOAPBinding;
-
-import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite;
-import org.apache.axis2.jaxws.description.builder.WebParamAnnot;
-
-/**
- * A ParameterDescripton corresponds to parameter to a method on an SEI. That
- * SEI could be explicit (i.e. WebService.endpointInterface=sei.class) or
- * implicit (i.e. public methods on the service implementation are the contract
- * and thus the implicit SEI).
- * 
- * ParameterDescriptons contain information that is only relevent for and
- * SEI-based service, i.e. one that is invoked via specific methods. This class
- * does not exist for Provider-based services (i.e. those that specify
- * WebServiceProvider)
- * 
- * <pre>
- *  <b>ParameternDescription details</b>
- *  
- *      CORRESPONDS TO:      A parameter to a method on an SEI (on both Client and Server)      
- *          
- *      AXIS2 DELEGATE:      None
- *      
- *      CHILDREN:            None
- *      
- *      ANNOTATIONS:
- *          WebParam [181]
- *      
- *      WSDL ELEMENTS:
- *          message parts
- *          
- * </pre>
- * 
- */
-public class ParameterDescription {
-    private OperationDescription parentOperationDescription;
-    private Class parameterType;
-    private ParameterizedType parameterGenericType;
-    // 0-based number of the parameter in the argument list
-    private int parameterNumber = -1;
-
-    // ANNOTATION: @WebMethod
-    private WebParam            webParamAnnotation;
-    private String              webParamName;
-    private String              webParamPartName;
-    public static final String  WebParam_TargetNamespace_DEFAULT = "";
-    private String              webParamTargetNamespace;
-    private WebParam.Mode       webParamMode;
-    public static final Boolean WebParam_Header_DEFAULT = new Boolean(false);
-    private Boolean             webParamHeader;
-    
-    ParameterDescription(int parameterNumber, Class parameterType, Type parameterGenericType, Annotation[] parameterAnnotations, OperationDescription parent) {
-        this.parameterNumber = parameterNumber;
-        this.parentOperationDescription = parent;
-        this.parameterType = parameterType;
-        
-        // The Type argument could be a Type (if the parameter is a Paramaterized Generic) or
-        // just a Class (if it is not).  We only need to keep track of Paramaterized Type information. 
-        if (ParameterizedType.class.isInstance(parameterGenericType)) {   
-            this.parameterGenericType = (ParameterizedType) parameterGenericType;
-        }
-        findWebParamAnnotation(parameterAnnotations);
-    }
-    
-    ParameterDescription(int parameterNumber, ParameterDescriptionComposite pdc, OperationDescription parent) {
-    	this.parameterNumber = parameterNumber;
-    	this.parentOperationDescription = parent;
-    	this.parameterType = pdc.getParameterTypeClass();
-    	
-    	
-        if (ParameterizedType.class.isInstance(pdc.getParameterGenericType())) {   
-            this.parameterGenericType = (ParameterizedType) pdc.getParameterGenericType();
-        }
 
-    	webParamAnnotation = pdc.getWebParamAnnot();
-    	
-    	//TODO: Need to build the schema map. Need to add logic to add this parameter
-    	//	    to the schema map.
-    	
-    	//TODO: Need to consider processing the following JAXWS annotations on this DBC
-    	// webServiceRef is probably only client, so shouldn't be here
-    	//webServiceContextAnnotation = pdc.getWebServiceContextAnnot();
-    	//webServiceRefAnnotation = pdc.getWebServiceRefAnnot();
-    }
+public interface ParameterDescription {
+// TODO: (JLB) Fix this to not be the WebParam mode
+//    public enum Mode{IN, OUT, INOUT};
+    public OperationDescription getOperationDescription();
     
-    /*
-     * This grabs the WebParam annotation from the list of annotations for this parameter
-     * This should be DEPRECATED once DBC processing is complete.
-     */
-    private void findWebParamAnnotation(Annotation[] annotations) {
-        for (Annotation checkAnnotation:annotations) {
-            // REVIEW: This may not work with the MDQInput.  From the java.lang.annotation.Annotation interface
-            //         javadoc: "Note that an interface that manually extends this one does not define an annotation type."
-            if (checkAnnotation.annotationType() == WebParam.class) {
-                webParamAnnotation =  (WebParam) checkAnnotation;
-            }
-        }
-    }
+    public String getParameterName();
+    public String getTargetNamespace();
+    public String getPartName();
     
-    public OperationDescription getOperationDescription() {
-        return parentOperationDescription;
-    }
+    public boolean isHolderType();
+    public Class getParameterType();
+    public Class getParameterActualType();
     
-    public Class getParameterType() {
-        return parameterType;
-    }
-    
-    /**
-     * For a non-Holder type, returns the parameter class.  For a Holder<T> type, returns the class of T
-     * @return
-     */
-    public Class getParameterActualType() {
-        if (isHolderType() && parameterGenericType != null) {
-            // For types of Holder<T>, return the class associated with T
-            return (Class) parameterGenericType.getActualTypeArguments()[0];
-        }
-        else {
-            return parameterType;
-        }
-            
-    }
-    
-    public boolean isHolderType() {
-        // Holder types are defined by JSR-224 JAX-WS 2.0, Sec 2.3.3, pg 16
-        boolean returnValue = false;
-        if (parameterGenericType != null && ParameterizedType.class.isInstance(parameterGenericType)) {   
-            if (parameterGenericType.getRawType() == javax.xml.ws.Holder.class) {
-                returnValue = true;
-            }
-        }
-        return returnValue;
-    }
-
-    // =====================================
-    // ANNOTATION: WebParam
-    // =====================================
-    WebParam getWebParam() {
-        return webParamAnnotation;
-    }
-    
-    public String getWebParamName() {
-        if (webParamName == null) {
-            if (getWebParam() != null && !DescriptionUtils.isEmpty(getWebParam().name())) {
-                webParamName = getWebParam().name();
-            }
-            else if (getOperationDescription().getSoapBindingStyle() == SOAPBinding.Style.DOCUMENT
-                    && getOperationDescription().getSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.BARE) {
-                // Defaul per JSR-181 MR Sec 4.4.1, pg 19
-                // TODO: Validation: For BARE paramaterUse, only a single IN our INOUT paramater and a single output (either return or OUT or INOUT) is allowed
-                //       Per JSR-224, Sec 3.6.2.2, pg 37
-                webParamName = getOperationDescription().getWebMethodOperationName(); 
-            }
-            else {
-                // Default per JSR-181 MR Sec 4.4.1, pg 20
-                // Return "argN" where N is the index of the parameter in the method signature
-                webParamName = "arg" + parameterNumber;
-            }
-        }
-        return webParamName;
-    }
-    
-    public String getWebParamPartName() {
-        if (webParamPartName == null) {
-            if (getWebParam() != null && !DescriptionUtils.isEmpty(getWebParam().partName())) {
-                webParamPartName = getWebParam().partName();
-            }
-            else {
-                // Default per JSR-181 MR Sec 4.4.1, pg 20
-                webParamPartName = getWebParamName();
-            }
-        }
-        return webParamPartName;
-    }
+    public boolean isHeader();
+//  TODO: (JLB) Fix this to not be the WebParam mode
+    public WebParam.Mode getMode();
 
-    public String getWebParamTargetNamespace() {
-        if (webParamTargetNamespace == null) {
-            if (getWebParam() != null && !DescriptionUtils.isEmpty(getWebParam().targetNamespace())) {
-                webParamTargetNamespace = getWebParam().targetNamespace();
-            }
-            else if (getOperationDescription().getSoapBindingStyle() == SOAPBinding.Style.DOCUMENT
-                    && getOperationDescription().getSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.WRAPPED
-                    && !getWebParamHeader()) {
-                // Defaul per JSR-181 MR Sec 4.4.1, pg 20
-                webParamTargetNamespace = WebParam_TargetNamespace_DEFAULT; 
-            }
-            else {
-                // Default per JSR-181 MR Sec 4.4.1, pg 20
-                webParamTargetNamespace = getOperationDescription().getEndpointInterfaceDescription().getEndpointDescription().getWebServiceTargetNamespace();
-            }
-        }
-        return webParamTargetNamespace;
-    }
-    
-    public WebParam.Mode getWebParamMode() {
-        if (webParamMode == null) {
-            // REVIEW: Is the following correct?
-            // Interesting conundrum here:
-            // Because WebParam.mode has a default value, it will always return something if the
-            // annotation is present.  That value is currently Mode.IN.  However, that default is only
-            // correct for a non-Holder Type; the correct default for a Holder Type is Mode.INOUT.  Furthermore,
-            // there's no way (I can tell) to differentiate if the setting for mode() was specified or defaulted,
-            // so there's no way to tell if the value is defaulted to IN or explicitly specified IN by the annotation.
-            // The conundrum is: Do we return the value from the annotation, or do we return the default value based on the
-            // type.  For now, for a Holder type that has a value of IN, we reset the value to INOUT.
-            // That means even if WebParam.mode=IN was explicitly set, it will be overridden to INOUT.
-            // The default values are from JSR-181 MR Sec 4.4.1, pg 20
-            
-            // Unlike a String value, if the annotation is present, it will return a usable default value as defined by 
-            // the Annotation.  That is currently Mode.IN
-            if (getWebParam() != null) {
-                webParamMode = getWebParam().mode();
-            }
-            else {
-                webParamMode = WebParam.Mode.IN;
-            }
-            
-            if (isHolderType() && webParamMode == WebParam.Mode.IN) {
-                // Default per JSR-181 MR Sec 4.4.1, pg 20
-                webParamMode = WebParam.Mode.INOUT;
-            }
-        }
-        return webParamMode;
-    }
     
-    public boolean getWebParamHeader() {
-        if (webParamHeader == null) {
-            // Unlike a String value, if the annotation is present, it will return a usable default value.
-            if (getWebParam() != null) {
-                webParamHeader = getWebParam().header();
-            }
-            else {
-                webParamHeader = WebParam_Header_DEFAULT;
-            }
-        }
-        return webParamHeader.booleanValue();
-    }
-}
+}
\ No newline at end of file

Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionImpl.java?view=auto&rev=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionImpl.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionImpl.java Thu Nov  2 17:33:00 2006
@@ -0,0 +1,286 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * 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.axis2.jaxws.description;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.GenericDeclaration;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+
+import javax.jws.WebParam;
+import javax.jws.soap.SOAPBinding;
+
+import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite;
+import org.apache.axis2.jaxws.description.builder.WebParamAnnot;
+
+/**
+ * A ParameterDescripton corresponds to parameter to a method on an SEI. That
+ * SEI could be explicit (i.e. WebService.endpointInterface=sei.class) or
+ * implicit (i.e. public methods on the service implementation are the contract
+ * and thus the implicit SEI).
+ * 
+ * ParameterDescriptons contain information that is only relevent for and
+ * SEI-based service, i.e. one that is invoked via specific methods. This class
+ * does not exist for Provider-based services (i.e. those that specify
+ * WebServiceProvider)
+ * 
+ * <pre>
+ *  <b>ParameternDescription details</b>
+ *  
+ *      CORRESPONDS TO:      A parameter to a method on an SEI (on both Client and Server)      
+ *          
+ *      AXIS2 DELEGATE:      None
+ *      
+ *      CHILDREN:            None
+ *      
+ *      ANNOTATIONS:
+ *          WebParam [181]
+ *      
+ *      WSDL ELEMENTS:
+ *          message parts
+ *          
+ * </pre>
+ * 
+ */
+class ParameterDescriptionImpl implements ParameterDescription, ParameterDescriptionJava, ParameterDescriptionWSDL {
+    private OperationDescription parentOperationDescription;
+    private Class parameterType;
+    private ParameterizedType parameterGenericType;
+    // 0-based number of the parameter in the argument list
+    private int parameterNumber = -1;
+
+    // ANNOTATION: @WebMethod
+    private WebParam            webParamAnnotation;
+    private String              webParamName;
+    private String              webParamPartName;
+    public static final String  WebParam_TargetNamespace_DEFAULT = "";
+    private String              webParamTargetNamespace;
+    private WebParam.Mode       webParamMode;
+    public static final Boolean WebParam_Header_DEFAULT = new Boolean(false);
+    private Boolean             webParamHeader;
+    
+    ParameterDescriptionImpl(int parameterNumber, Class parameterType, Type parameterGenericType, Annotation[] parameterAnnotations, OperationDescription parent) {
+        this.parameterNumber = parameterNumber;
+        this.parentOperationDescription = parent;
+        this.parameterType = parameterType;
+        
+        // The Type argument could be a Type (if the parameter is a Paramaterized Generic) or
+        // just a Class (if it is not).  We only need to keep track of Paramaterized Type information. 
+        if (ParameterizedType.class.isInstance(parameterGenericType)) {   
+            this.parameterGenericType = (ParameterizedType) parameterGenericType;
+        }
+        findWebParamAnnotation(parameterAnnotations);
+    }
+    
+    ParameterDescriptionImpl(int parameterNumber, ParameterDescriptionComposite pdc, OperationDescription parent) {
+        this.parameterNumber = parameterNumber;
+        this.parentOperationDescription = parent;
+        this.parameterType = pdc.getParameterTypeClass();
+        
+        
+        if (ParameterizedType.class.isInstance(pdc.getParameterGenericType())) {   
+            this.parameterGenericType = (ParameterizedType) pdc.getParameterGenericType();
+        }
+
+        webParamAnnotation = pdc.getWebParamAnnot();
+        
+        //TODO: Need to build the schema map. Need to add logic to add this parameter
+        //      to the schema map.
+        
+        //TODO: Need to consider processing the following JAXWS annotations on this DBC
+        // webServiceRef is probably only client, so shouldn't be here
+        //webServiceContextAnnotation = pdc.getWebServiceContextAnnot();
+        //webServiceRefAnnotation = pdc.getWebServiceRefAnnot();
+    }
+    
+    /*
+     * This grabs the WebParam annotation from the list of annotations for this parameter
+     * This should be DEPRECATED once DBC processing is complete.
+     */
+    private void findWebParamAnnotation(Annotation[] annotations) {
+        for (Annotation checkAnnotation:annotations) {
+            // REVIEW: This may not work with the MDQInput.  From the java.lang.annotation.Annotation interface
+            //         javadoc: "Note that an interface that manually extends this one does not define an annotation type."
+            if (checkAnnotation.annotationType() == WebParam.class) {
+                webParamAnnotation =  (WebParam) checkAnnotation;
+            }
+        }
+    }
+    
+    public OperationDescription getOperationDescription() {
+        return parentOperationDescription;
+    }
+    
+    public Class getParameterType() {
+        return parameterType;
+    }
+    
+    /**
+     * For a non-Holder type, returns the parameter class.  For a Holder<T> type, returns the class of T
+     * @return
+     */
+    public Class getParameterActualType() {
+        if (isHolderType() && parameterGenericType != null) {
+            // For types of Holder<T>, return the class associated with T
+            return (Class) parameterGenericType.getActualTypeArguments()[0];
+        }
+        else {
+            return parameterType;
+        }
+            
+    }
+    
+    public boolean isHolderType() {
+        // Holder types are defined by JSR-224 JAX-WS 2.0, Sec 2.3.3, pg 16
+        boolean returnValue = false;
+        if (parameterGenericType != null && ParameterizedType.class.isInstance(parameterGenericType)) {   
+            if (parameterGenericType.getRawType() == javax.xml.ws.Holder.class) {
+                returnValue = true;
+            }
+        }
+        return returnValue;
+    }
+
+    // =====================================
+    // ANNOTATION: WebParam
+    // =====================================
+    public WebParam getAnnoWebParam() {
+        return webParamAnnotation;
+    }
+    
+    public String getParameterName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebParamName();
+    }
+    
+    public String getAnnoWebParamName() {
+        if (webParamName == null) {
+            if (getAnnoWebParam() != null && !DescriptionUtils.isEmpty(getAnnoWebParam().name())) {
+                webParamName = getAnnoWebParam().name();
+            }
+            else if (getOperationDescription().getSoapBindingStyle() == SOAPBinding.Style.DOCUMENT
+                    && getOperationDescription().getSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.BARE) {
+                // Defaul per JSR-181 MR Sec 4.4.1, pg 19
+                // TODO: Validation: For BARE paramaterUse, only a single IN our INOUT paramater and a single output (either return or OUT or INOUT) is allowed
+                //       Per JSR-224, Sec 3.6.2.2, pg 37
+                webParamName = getOperationDescription().getOperationName(); 
+            }
+            else {
+                // Default per JSR-181 MR Sec 4.4.1, pg 20
+                // Return "argN" where N is the index of the parameter in the method signature
+                webParamName = "arg" + parameterNumber;
+            }
+        }
+        return webParamName;
+    }
+    public String getPartName() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebParamPartName();
+    }
+    public String getAnnoWebParamPartName() {
+        if (webParamPartName == null) {
+            if (getAnnoWebParam() != null && !DescriptionUtils.isEmpty(getAnnoWebParam().partName())) {
+                webParamPartName = getAnnoWebParam().partName();
+            }
+            else {
+                // Default per JSR-181 MR Sec 4.4.1, pg 20
+                webParamPartName = getAnnoWebParamName();
+            }
+        }
+        return webParamPartName;
+    }
+
+    public String getTargetNamespace() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebParamTargetNamespace();
+    }
+    public String getAnnoWebParamTargetNamespace() {
+        if (webParamTargetNamespace == null) {
+            if (getAnnoWebParam() != null && !DescriptionUtils.isEmpty(getAnnoWebParam().targetNamespace())) {
+                webParamTargetNamespace = getAnnoWebParam().targetNamespace();
+            }
+            else if (getOperationDescription().getSoapBindingStyle() == SOAPBinding.Style.DOCUMENT
+                    && getOperationDescription().getSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.WRAPPED
+                    && !getAnnoWebParamHeader()) {
+                // Defaul per JSR-181 MR Sec 4.4.1, pg 20
+                webParamTargetNamespace = WebParam_TargetNamespace_DEFAULT; 
+            }
+            else {
+                // Default per JSR-181 MR Sec 4.4.1, pg 20
+                webParamTargetNamespace = ((EndpointDescriptionJava) getOperationDescription().getEndpointInterfaceDescription().getEndpointDescription()).getAnnoWebServiceTargetNamespace();
+            }
+        }
+        return webParamTargetNamespace;
+    }
+    
+//    public Mode getMode() {
+    public WebParam.Mode getMode() {
+        // TODO: (JLB) WSDL/Anno merge.  Problem is that OpDesc is expecting WebParam.Mode
+        return getAnnoWebParamMode();
+    }
+    
+    public WebParam.Mode getAnnoWebParamMode() {
+        if (webParamMode == null) {
+            // REVIEW: Is the following correct?
+            // Interesting conundrum here:
+            // Because WebParam.mode has a default value, it will always return something if the
+            // annotation is present.  That value is currently Mode.IN.  However, that default is only
+            // correct for a non-Holder Type; the correct default for a Holder Type is Mode.INOUT.  Furthermore,
+            // there's no way (I can tell) to differentiate if the setting for mode() was specified or defaulted,
+            // so there's no way to tell if the value is defaulted to IN or explicitly specified IN by the annotation.
+            // The conundrum is: Do we return the value from the annotation, or do we return the default value based on the
+            // type.  For now, for a Holder type that has a value of IN, we reset the value to INOUT.
+            // That means even if WebParam.mode=IN was explicitly set, it will be overridden to INOUT.
+            // The default values are from JSR-181 MR Sec 4.4.1, pg 20
+            
+            // Unlike a String value, if the annotation is present, it will return a usable default value as defined by 
+            // the Annotation.  That is currently Mode.IN
+            if (getAnnoWebParam() != null) {
+                webParamMode = getAnnoWebParam().mode();
+            }
+            else {
+                webParamMode = WebParam.Mode.IN;
+            }
+            
+            if (isHolderType() && webParamMode == WebParam.Mode.IN) {
+                // Default per JSR-181 MR Sec 4.4.1, pg 20
+                webParamMode = WebParam.Mode.INOUT;
+            }
+        }
+        return webParamMode;
+    }
+    
+    public boolean isHeader() {
+        // TODO: (JLB) WSDL/Anno merge
+        return getAnnoWebParamHeader();
+    }
+    public boolean getAnnoWebParamHeader() {
+        if (webParamHeader == null) {
+            // Unlike a String value, if the annotation is present, it will return a usable default value.
+            if (getAnnoWebParam() != null) {
+                webParamHeader = getAnnoWebParam().header();
+            }
+            else {
+                webParamHeader = WebParam_Header_DEFAULT;
+            }
+        }
+        return webParamHeader.booleanValue();
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionJava.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionJava.java?view=auto&rev=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionJava.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionJava.java Thu Nov  2 17:33:00 2006
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * 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.axis2.jaxws.description;
+
+import javax.jws.WebParam;
+
+public interface ParameterDescriptionJava {
+    public WebParam getAnnoWebParam();
+    public boolean getAnnoWebParamHeader();
+    public WebParam.Mode getAnnoWebParamMode();
+    public String getAnnoWebParamName();
+    public String getAnnoWebParamPartName();
+    public String getAnnoWebParamTargetNamespace();
+}

Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionWSDL.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionWSDL.java?view=auto&rev=470629
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionWSDL.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/ParameterDescriptionWSDL.java Thu Nov  2 17:33:00 2006
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Copyright 2006 International Business Machines Corp.
+ *
+ * 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.axis2.jaxws.description;
+
+public interface ParameterDescriptionWSDL {
+
+}



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