Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-6523

org.apache.cxf.interceptor.Fault: wrong number of arguments (due to explicit soap header)

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 2.7.11, 3.1.2
    • Fix Version/s: 3.0.13, 3.1.11, 3.2.0
    • Component/s: Core
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      An explicit Soap header is causing issues due to having the same QName as the wrapped Soap body

      <wsdl:message name="ARAuthenticate">
      <wsdl:part element="s0:AuthenticationInfo" name="parameters"/>
      </wsdl:message>

      <wsdl:message name="GetWorkOrdersListSoapIn">
      <wsdl:part element="s0:GetWorkOrdersList" name="parameters"/>
      </wsdl:message>

      This results in a MessageInfo object with 1 messagePart and 1 outOfbandPart, both having the same QName.

      Problem is that in the WrapperClassInInterceptor we loop over messageInfo.getMessageParts which actually returns the combined list of messageParts and outOfBandParts.

      Now for the header part with QName "

      {urn:VF_WorkOrders}

      parameters" we do a lookup wrappedMessageInfo.getMessagePart(part.getName()) which incorrectly retrieves the wrapped input messagePart.

      for (MessagePartInfo part : messageInfo.getMessageParts()) {
      if (Boolean.TRUE.equals(part.getProperty(ReflectionServiceFactoryBean.HEADER))) {
      MessagePartInfo mpi = wrappedMessageInfo.getMessagePart(part.getName());
      if (mpi != null && lst.hasValue(mpi))

      { count++; newParams.put(part, lst.get(mpi)); }

      else if (mpi == null || mpi.getTypeClass() == null) {
      //header, but not mapped to a param on the method
      if (removes == null)

      { removes = new ArrayList<Integer>(); }

      removes.add(part.getIndex());
      }
      } else

      { ++count; }

      }

        Attachments

        1. workorders.wsdl
          5 kB
          Robby Pelssers

          Activity

            People

            • Assignee:
              dkulp Daniel Kulp
              Reporter:
              robbypelssers Robby Pelssers
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: