3 Replies Latest reply on May 2, 2014 6:15 AM by titan

    Cannot bind web services to public IP

    bernhardh

      Hi,

       

      we recently moved our SOAP web services stack from a Glassfish application server to JBoss AS 7 on an Amazon EC2 instance.

      Everything works perfectly with the existing .NET web service clients. The problem, however, comes when trying to create a new web service client from the web service's WSDL. When trying to make a web service call after generating the client-side code from the WSDL, an error is issued that reports that the service cannot be accessed at "localhost" - while the service is in fact running on a remote server (new web service clients accessing a locally-hosted web service work fine).

       

      When I inspect the WSDL as it is served by JBoss AS, I believe I can see the problem. The WSDL ends with:

       

      ...

        <wsdl:service name="IdentityService">

          <wsdl:port binding="tns:IdentityServiceSoapBinding" name="IdentityServicePort">

            <soap:address location="http://localhost:8080/identity/IdentityService"/>

          </wsdl:port>

        </wsdl:service>

      </wsdl:definitions>

       

      Note that the location attribute refers to "localhost". This is wrong - it should be the server's public IP address or any one of its domain names.

      As far as I can gather JBoss AS binds web services to localhost by default. I've tried binding the web services to the server's public IP-address, for instance, by running

       

      ./standalone.sh -b [public IP]

       

      Then, when the application server starts up, all of the web services' deployment statuses go to "failed". In the server log I cannot find any indication as to why the web services fail to deploy. When I start JBoss AS without specifying the binding address, the web services deploy successfully.

       

      With Glassfish we never had to specify a binding address. When the web service is deployed on Glassfish and its WSDL is retrieved, the location attribute of the soap:address tag always contains the address through which the WSDL was accessed (when it's accessed through the public IP, it starts with "http://[public IP]:8080..."; when it's accessed through a domain name, it starts with "http://[domain name used]:8080...").

      Our existing web service clients work fine, because they have been generated with the correct WSDL, when the web services were still hosted on Glassfish.

      If I could configure our JBoss AS server to return the WSDL with the correct address like that, that would be severely awesome. Otherwise, I would like to know how to bind the web services to a specified IP address, and why it currently doesn't work.

       

      Any ideas?

        • 1. Re: Cannot bind web services to public IP
          nickarls

          Does fiddling around with the wsdl-host do anything?

           

          <subsystem xmlns="urn:jboss:domain:webservices:1.1">

               <modify-wsdl-address>true</modify-wsdl-address>

               <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>

          • 2. Re: Cannot bind web services to public IP
            bernhardh

            Hi Nicklas,

             

            I have changed the value of the "modify-wsdl-address" setting to "false" in the hopes that that would result in the Glassfish-type behaviour. Sadly the address in the WSDL still referred to "localhost".

            However, setting "modify-wsdl-address" to "true" and "wsdl-host" to the server's public IP address did the trick!

            Thank you for your help!

            • 3. Re: Cannot bind web services to public IP
              titan

              When I  change the server's program argument  -b localhost to -b {IP address}, the server fails to start.
              Please help.