Martin Clough wrote:
Simon

I have created JIRA TUSCANY-3269 for this problem which includes the patch to setIPAddress.

Thanks, Martin!  I have committed this to the 1.x branch.  I did
not put it into 1.5.1 because of slight concerns that this change
might have unintended consequences, and I didn't want to take the
risk of destabilizing 1.5.1 at this late stage.

  Simon

Thanks
Martin

2009/9/8 Simon Nash <[email protected] <mailto:[email protected]>>

    Martin Clough wrote:

        We have a Tuscany 1.5 installation under Tomcat on one server
        (the application server), which is accessed using Apache httpd
        and the Apache/Tomcat connector on a separate web server.

        We are exposing SOAP web services in Tuscany, but the WSDL for
        these is incorrect because the SOAP address location has the
        application server address instead of the web server name:

        This is what we get:

        <wsdl:service name="Service">

        <wsdl:port name="Port" binding="tns:Binding">

        <SOAP11:address location="http://*[ip address of app
        server]*/serviceurl"/>

        </wsdl:port>

        </wsdl:service>

        This is what we need:

        <wsdl:service name="Service">

        <wsdl:port name="Port" binding="tns:Binding">

        <SOAP11:address location="http://*webserver*/serviceurl"/>

        </wsdl:port>

        </wsdl:service>

        Without this change, clients using Java 6 JAXB cannot connect to
        the web service.

        I have corrected this with an updated
        tuscany-binding-ws-axis2-1.5.jar which has fix in
        org.apache.tuscany.sca.binding.ws.axis2.TuscanyListingAgent to
        the setIPAddress method. The fix is:

        private static String setIPAddress(String wsdlURI, String
        requestURI) {

        try {

        URI wsdlURIObj = new URI(wsdlURI);

        String wsdlHost = wsdlURIObj.getHost();

        int wsdlPort = wsdlURIObj.getPort();

        String wsdlAddr = wsdlHost + (wsdlPort != -1 ? ":" +

        Integer.toString(wsdlPort) : "");

        URI requestURIObj = new URI(requestURI);

        -              String ipAddr = HttpUtils.getIpAddress();

        +              String ipAddr = requestURIObj.getHost();

        int requestPort = requestURIObj.getPort();

        String newAddr = ipAddr + (requestPort != -1 ? ":" +

        Integer.toString(requestPort) : "");

        return wsdlURI.replace(wsdlAddr, newAddr);

        } catch (Exception e) {

        // URI string not in expected format, so return the WSDL URI
        unmodified

        return wsdlURI;

        }

        }

        I'm happy to create a JIRA and submit a patch to this effect.
        However, I suspect that this undermines the purpose of this
        method. So my questions are: what is the correct way to remedy
        this? Would this patch work for you? Is there another way of
        fixing this?

    Martin,
    Thanks for reporting this.  I think the inconsistency between the
    treatment of ipAddr and requestPort is accidental rather than
    deliberate.
    So please go ahead and create a JIRA with your patch, and I will commit
    the patch unless someone else comes up with a reason for not making this
    change.

     Simon

        Many thanks

        Martin






Reply via email to