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

SoapTransportFactory.getConduit(EndpointInfo ei, EndpointReferenceType target) ignores second parameter

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.5
    • 2.5.1, 2.4.6
    • Core
    • None
    • Windows

    • Unknown

    Description

      Hi,

      I faced the problem in custom conduit selector scenario.

      Use case: custom conduit selector (extends AbstractConduitSelector) resolves endpoints dynamically (using external ServiceRegistry).

      When address is resolved, resolved address cannot be set to AbstractConduitSelector.endpoint, because different concurrent consumers using the same configuration can resolve endpoint differently.
      Therefore address is just set to the message: message.set(Message.ENDPOINT_ADDRESS, resolvedAddress)
      In this case addresses in message: message.get(Message.ENDPOINT_ADDRESS) and in endpoint: AbstractConduitSelector.endpoint.getEndpointInfo().getAddress() are different.

      AbstractConduitSelector check it and prepares EndpointReferenceType for this case:

                             String add = (String)message.get(Message.ENDPOINT_ADDRESS);
                              if (StringUtils.isEmpty(add)
                                  || add.equals(ei.getAddress())) {
                                  replaceEndpointAddressPropertyIfNeeded(message, add);
                                  selectedConduit = conduitInitiator.getConduit(ei);
                              } else {
                                  EndpointReferenceType epr = new EndpointReferenceType();
                                  AttributedURIType ad = new AttributedURIType();
                                  ad.setValue(add);
                                  epr.setAddress(ad);
                                  selectedConduit = conduitInitiator.getConduit(ei, epr);
                              }
      

      Problem: unfortunately SoapTransportFactory.getConduit(EndpointInfo ei, EndpointReferenceType target) ignores second parameter and calls SoapTransportFactory.getConduit(EndpointInfo ei). In my case it causes wrong Conduit resolving.

      Proposal: update SoapTransportFactory.getConduit() in way that it uses address in EndpointReferenceType if it is provided.

      Patch is attached.

      Regards,
      Andrei.

      Attachments

        1. SoapTransportFactory.patch
          2 kB
          Andrei Shakirin

        Activity

          People

            dkulp Daniel Kulp
            ashakirin Andrei Shakirin
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: