[jbossws-commits] JBossWS SVN: r1977 - in trunk/jbossws-core/src/main/java/org/jboss/ws: metadata/builder/jaxrpc and 3 other directories.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Mon Jan 15 23:10:06 EST 2007


Author: jason.greene at jboss.com
Date: 2007-01-15 23:10:04 -0500 (Mon, 15 Jan 2007)
New Revision: 1977

Modified:
   trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java
   trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
   trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java
   trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java
   trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
Log:
Fix JBWS-1384 (Fix document/literal wrapped attachment parameters)
Also mark "message style" as deprecated


Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java	2007-01-16 04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java	2007-01-16 04:10:04 UTC (rev 1977)
@@ -258,7 +258,7 @@
          Class javaType = paramMetaData.getJavaType();
 
          Object value;
-         if (opMetaData.isDocumentWrapped() && paramMetaData.isInHeader() == false)
+         if (opMetaData.isDocumentWrapped() && !paramMetaData.isInHeader() && !paramMetaData.isSwA())
          {
             value = ParameterWrapping.wrapRequestParameters(paramMetaData, inputParams);
          }
@@ -300,7 +300,7 @@
       Method method = opMetaData.getJavaMethod();
       Class[] targetParameterTypes = method.getParameterTypes();
 
-      if (opMetaData.isDocumentWrapped() && paramMetaData.isInHeader() == false && paramMetaData.isMessageType() == false)
+      if (opMetaData.isDocumentWrapped() && !paramMetaData.isInHeader()&& !paramMetaData.isSwA() && !paramMetaData.isMessageType())
       {
          outParameters = ParameterWrapping.unwrapRequestParameters(paramMetaData, paramValue, payload);
          syncOutWrappedParameters(targetParameterTypes);

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java	2007-01-16 04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java	2007-01-16 04:10:04 UTC (rev 1977)
@@ -386,21 +386,15 @@
          if (pmd != null)
             pmd.setInHeader(true);
       }
-
-      // we don't support swa binding parameters in document style 
-      // http://jira.jboss.org/jira/browse/JBWS-1384
-      if (opMetaData.getStyle() == Style.RPC)
+      for (WSDLMIMEPart mimePart : bindingInput.getMimeParts())
       {
-         for (WSDLMIMEPart mimePart : bindingInput.getMimeParts())
-         {
-            String partName = mimePart.getPartName();
-            QName xmlName = new QName(partName);
-            QName xmlType = mimePart.getXmlType();
+         String partName = mimePart.getPartName();
+         QName xmlName = new QName(partName);
+         QName xmlType = mimePart.getXmlType();
 
-            ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++, false);
-            pmd.setSwA(true);
-            pmd.setMimeTypes(mimePart.getMimeTypes());
-         }
+         ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++, false);
+         pmd.setSwA(true);
+         pmd.setMimeTypes(mimePart.getMimeTypes());
       }
 
       return wsdlPosition;
@@ -596,9 +590,10 @@
       }
    }
 
-   private int processDocElement(OperationMetaData operation, WSDLInterfaceOperation wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter> wrappedParameters, List<WrappedParameter> wrappedResponseParameters)
+   private int processDocElement(OperationMetaData operation, WSDLInterfaceOperation wsdlOperation, WSDLBindingOperation bindingOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter> wrappedParameters, List<WrappedParameter> wrappedResponseParameters)
    {
       WSDLInterfaceOperationInput input = wsdlOperation.getInputs()[0];
+      WSDLBindingOperationInput bindingInput = bindingOperation.getInputs()[0];
       int wsdlPosition;
 
       QName xmlName = input.getElement();
@@ -644,6 +639,11 @@
                throw new IllegalArgumentException("wsdl-message-message mapping required for document/literal wrapped");
 
             String elementName = wsdlMessageMapping.getWsdlMessagePartName();
+
+            // Skip attachments
+            if (bindingInput.getMimePart(elementName) != null)
+               continue;
+
             String variable = variableMap.get(elementName);
             if (variable == null)
                throw new IllegalArgumentException("Could not determine variable name for element: " + elementName);
@@ -863,7 +863,7 @@
       // WS-I BP 1.0 allows document/literal bare to have zero message parts
       if (wsdlOperation.getInputs().length > 0)
       {
-         wsdlPosition = processDocElement(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, wrappedParameters, wrappedResponseParameters);
+         wsdlPosition = processDocElement(opMetaData, wsdlOperation, bindingOperation, seiMethodMapping, typeMapping, wrappedParameters, wrappedResponseParameters);
          wsdlPosition = processBindingParameters(opMetaData, wsdlOperation, seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
       }
       else

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java	2007-01-16 04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java	2007-01-16 04:10:04 UTC (rev 1977)
@@ -132,6 +132,9 @@
       Type valueType = (holder ? HolderUtils.getValueType(actualType) : actualType);
       Class valueClass = JavaUtils.erasure(valueType);
 
+      // FIXME - Why do we need this hack? It shouldn't be needed. The method
+      // signature should _ALWAYS_ match, else we will get ambiguous or
+      // incorrect results
       List<Class> anyTypes = new ArrayList<Class>();
       anyTypes.add(javax.xml.soap.SOAPElement.class);
       anyTypes.add(org.w3c.dom.Element.class);
@@ -312,11 +315,15 @@
       this.soapArrayCompType = xmlType;
    }
 
+
+   @Deprecated
+   // FIXME This hack should be removed
    public boolean isMessageType()
    {
       return messageTypes.contains(javaTypeName);
    }
 
+   @Deprecated
    public static boolean isMessageType(String javaTypeName)
    {
       return messageTypes.contains(javaTypeName);
@@ -384,7 +391,8 @@
       // reset java type
       javaType = null;
 
-      if (getOperationMetaData().isDocumentWrapped() && !isInHeader() && !isMessageType())
+      // FIXME - Remove messageType hack
+      if (getOperationMetaData().isDocumentWrapped() && !isInHeader() && !isSwA() && !isMessageType())
       {
          new DynamicWrapperGenerator(getClassLoader()).generate(this);
 

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java	2007-01-16 04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java	2007-01-16 04:10:04 UTC (rev 1977)
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
 
 /**
@@ -39,7 +40,7 @@
    private WSDLBindingOperation wsdlBindingOperation;
    private NCName messageLabel;
    private List<WSDLSOAPHeader> soapHeaders = new ArrayList<WSDLSOAPHeader>();
-   private List<WSDLMIMEPart> mimeParts = new ArrayList<WSDLMIMEPart>();
+   private LinkedHashMap<String, WSDLMIMEPart> mimeParts = new LinkedHashMap<String, WSDLMIMEPart>();
 
    public WSDLBindingMessageReference(WSDLBindingOperation wsdlBindingOperation)
    {
@@ -111,7 +112,7 @@
     */
    public void addMimePart(WSDLMIMEPart mimePart)
    {
-      this.mimeParts.add(mimePart);
+      this.mimeParts.put(mimePart.getPartName(), mimePart);
    }
 
    /**
@@ -121,6 +122,17 @@
     */
    public Collection<WSDLMIMEPart> getMimeParts()
    {
-      return mimeParts;
+      return mimeParts.values();
    }
+
+   /**
+    * Gets a specific MIME part
+    *
+    * @param partName the wsdl part name
+    * @return
+    */
+   public WSDLMIMEPart getMimePart(String partName)
+   {
+      return mimeParts.get(partName);
+   }
 }
\ No newline at end of file

Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java	2007-01-16 04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java	2007-01-16 04:10:04 UTC (rev 1977)
@@ -126,7 +126,7 @@
    // Temporary files used by this reader.
    private List<File> tempFiles = new ArrayList<File>();
 
-   // SWA handling   
+   // SWA handling
    private Map<QName, List<String>> skippedSWAParts = new HashMap<QName, List<String>>();
 
    /**
@@ -536,7 +536,8 @@
          for (Part srcPart : (List<Part>)srcMessage.getOrderedParts(paramOrder))
          {
             // Skip SWA attachment parts
-            if( ignorePart(srcPortType, srcPart) ) continue;
+            if (ignorePart(srcPortType, srcPart))
+               continue;
 
             if (Constants.URI_STYLE_DOCUMENT == destOperation.getStyle())
             {
@@ -742,7 +743,7 @@
       String style = destOperation.getStyle();
       if (Constants.URI_STYLE_RPC.equals(style))
       {
-         // R2203 An rpc-literal binding in a DESCRIPTION MUST refer, in its soapbind:body element(s), 
+         // R2203 An rpc-literal binding in a DESCRIPTION MUST refer, in its soapbind:body element(s),
          // only to wsdl:part element(s) that have been defined using the type attribute.
          if (srcPart.getName() == null)
             throw new WSDLException(WSDLException.INVALID_WSDL, "RPC style message parts must define a typy name: " + srcMessage.getQName());
@@ -757,7 +758,7 @@
       }
       else
       {
-         // R2204 A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), 
+         // R2204 A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s),
          // only to wsdl:part element(s) that have been defined using the element attribute
          // [hb] do this only for non swa porttypes
          if (srcPart.getElementName() == null)
@@ -1087,7 +1088,7 @@
          public void removeReference(QName element)
          {
             WSDLInterfaceOperationInput destIntfInput = destIntfOperation.getInput(element);
-            if (destIntfInput == null)
+            if (destIntfInput != null)
                destIntfOperation.removeInput(element);
          }
 
@@ -1120,7 +1121,7 @@
          public void removeReference(QName element)
          {
             WSDLInterfaceOperationOutput destIntfOutput = destIntfOperation.getOutput(element);
-            if (destIntfOutput == null)
+            if (destIntfOutput != null)
                destIntfOperation.removeInput(element);
          }
 
@@ -1217,7 +1218,6 @@
                   }
                }
 
-               // Found content types in this part
                if (name != null)
                {
                   QName xmlType = callback.getXmlType(name);




More information about the jbossws-commits mailing list