Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.6.2
-
None
-
None
-
Apache Tomcat/6.0.35
Ubuntu 12.04 LTS
Description
Our Tomcat axis2 is installed on server 192.168.0.16 at default port 8080. In our router, we have added a redirection ourservice.com:3480 -> 192.168.0.16:8080 to make the service publicly available.
The announced service port in all wdsl delivered (for several services) wrongly depends on the very first request sent to Axis2 after Tomcat server startup.
1. Calling "http://192.168.0.16:8080/axis2/services/Version?wsdl" as the first call gives:
[...]
<wsdl:service name="Version"><wsdl:port name="VersionHttpSoap11Endpoint" binding="ns:VersionSoap11Binding">
<soap:address location="http://192.168.0.16:8080/axis2/services/Version.VersionHttpSoap11Endpoint/"/>
</wsdl:port>
[...]
All later calls to the WSDL of any service now contain ":8080" as port number, instead of the number used in the request.
So calling "http://ourservice.com:3480/axis2/services/Version?wsdl" now gives
<soap:address location="http://ourservice.com:8080/axis2/services/Version.VersionHttpSoap11Endpoint/"/>
instead of the expected result
<soap:address location="http://ourservice.com:3480/axis2/services/Version.VersionHttpSoap11Endpoint/"/>
It also works the other way around, i.e. if the first coming all is coming from external, all services are advertised at port 3480 even in (internal) calls to port 8080.
A temporary fix is to set a static port in the transportReceiver, however naturally, in this case one of the WSDL (either internal or external) is always wrong.
What puzzles me is that the IP address is used correctly on each request to build the WSDL, while the port number stays cached from the very first call.