CommonsHTTPTransportSender duplicates query part of endpoint URL
----------------------------------------------------------------

         Key: AXIS2-299
         URL: http://issues.apache.org/jira/browse/AXIS2-299
     Project: Apache Axis 2.0 (Axis2)
        Type: Bug
  Components: transports  
    Versions: 0.92    
 Environment: WinXP, JVM 1.4 and JVM 1.5
    Reporter: Christoph Langguth


I have been experimenting with Axis2 for WS Client and Server applications; 
while building a (synchronous RPC-style) client for amazon.com webservices, I 
stumbled across the following bug:
the QueryString from the EndpointReference is duplicated in the POST request, 
thus rendering the service unusable. I.e.:
call.setTo(new 
EndPointReference("http://webservices.amazon.com/onca/soap?Service=AWSECommerceService";))
results in the following URL being used for the POST request:
http://webservices.amazon.com/onca/soap?Service=AWSECommerceService?Service=AWSECommerceService

Because I really needed this to work, I investigated the code and made the 
following change to CommonsHTTPTransportSender:

private void transportConfigurationPOST(
            MessageContext msgContext,
            OMElement dataout,
            URL url,
            String soapActionString)
            throws MalformedURLException, AxisFault, IOException {

        //execuite the HtttpMethodBase - a connection manager can be given for 
handle multiple
        httpClient = new HttpClient();
        //hostConfig handles the socket functions..
        //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);

        //Get the timeout values set in the runtime
        getTimoutValues(msgContext);
       
        // SO_TIMEOUT -- timeout for blocking reads

httpClient.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);
        // timeout for initial connection

httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);

        PostMethod postMethod = new PostMethod(url.toString());
/////////////////////// HERE IS THE CHANGE /////////////////////////
//        postMethod.setPath(url.getFile());
////////////////////////////////////////////////////////////////////

        msgContext.setProperty(HTTP_METHOD, postMethod);

        String charEncoding =
                (String) msgContext.getProperty(
                        MessageContext.CHARACTER_SET_ENCODING);
        if(charEncoding == null){
            charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
        }




it seems that url.getFile() returns the "file" portion of the URL, but 
*including* the querystring, which is obviously added again afterwards. When 
the line is commented out, the path remains set correctly, and the querystring 
appears only once..

I have tested this with Java 1.4 and 1.5, and as far as I can tell I didn't 
notice any drawbacks. There might of course be similar issues in other parts of 
the code (asynchronous or In-Only invocations, etc), but I have not tested this.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to