Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-4551

AxisOperationFactory.getAxisOperation(int mepURI) returns the wrong AxisOperation instance for http://www.w3.org/ns/wsdl/robust-in-only MEPs

Rank to TopRank to BottomAttach filesAttach ScreenshotBulk Copy AttachmentsBulk Move AttachmentsAdd voteVotersWatch issueWatchersCreate sub-taskConvert to sub-taskLinkCloneLabelsUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.4
    • None
    • codegen, deployment, wsdl
    • None

    Description

      AxisOperationFactory.getAxisOperation(int mepURI) returns the wrong AxisOperation instance for the ROBUST_IN_ONLY MEP. The code returns an InOutAxisOperation from this:

      case WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY : {
      abOpdesc = new InOutAxisOperation();
      abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);
      break;
      }

      There should be a coresponding RobustInOnlyAxisOperation that it returns like this:

      case WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY : {
      abOpdesc = new RobustInOnlyAxisOperation();
      abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);
      break;
      }

      This causes issues because it adds an out AxisMessage to the operation and also generates an <output> in the WSDL operations. This in-turn causes other code to think that it's a Request-Response style service and you get exceptions when no response comes back, like "The input stream for an incoming message is null".

      On the same note, AxisOperationFactory.getAxisOperationDescription(String mepURI) also needs to be fixed for Robust-Out-Only and Robust-In-Only MEPs

      else if (WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI) ||
      WSDL20_2006Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI) ||
      WSDL20_2004_Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI)) {
      abOpdesc = new RobustOutOnlyAxisOperation();
      abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY);
      } else if (WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI) ||
      WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI) ||
      WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI)) {
      abOpdesc = new RobustInOnlyAxisOperation();
      abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);
      }

      If a new RobustInOnlyAxisOperation is unnecessary for some reason, then at least the AxisOperationFactory.getAxisOperationDescription(String mepURI) method should be made consistent and the check for the ROBUST_IN_ONLY MEP should return an instance of InOutAxisOperation, the same way that AxisOperationFactory.getAxisOperation(int mepURI) does.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            breif Ben Reif

            Dates

              Created:
              Updated:

              Slack

                Issue deployment