-
Feature Request
-
Resolution: Won't Do
-
Major
-
None
-
4.3.0.GA_CP05
-
All
The common deployment environment in many organizations are
client -> load balancer -> x nodes of Apache web server + mod_jk -> y nodes of JBoss application server
When bottom-up approach for the web service is used, the JBoss applicaiton server generates the WSDL for the webservice. Here is example of such generated WSDL
- <definitions name="COPSWebService" targetNamespace="http://impl.service.ws.cops.bankofamerica.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://service.ws.cops.bankofamerica.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.service.ws.cops.bankofamerica.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<import location="https://bigip.test.address:123/copsws/webservices/logcopseventV001?wsdl&resource=ICOPSSOAPWebService_PortType835.wsdl" namespace="http://service.ws.cops.bankofamerica.com/" /> - <service name="COPSWebService">
- <port binding="ns1:ICOPSSOAPWebServiceBinding" name="COPSWebServicePort">
<soap:address location="https://bigip.test.address:123/copsws/webservices/logcopseventV001" />
</port>
</service>
</definitions>
Notice that the import location
<import location="https://bigip.test.address:123/copsws/webservices/logcopseventV001?wsdl&resource=ICOPSSOAPWebService_PortType835.wsdl" namespace="http://service.ws.cops.bankofamerica.com/" />
contains temporary name of the resource ICOPSSOAPWebService_PortType835.wsdl which is temporary file with the numberic portion 835 randomly generated during deployment. This portion of the WSDL will be different on each of the JBoss application server. If the load balancer doesn't use persistant load balancing and each request can be handled by any JBoss applicaiton server than the client may fail to loac the WSDL successfully. Here is the scenario
1. JBoss node 1 generated during deployment import location as
<import location="https://bigip.test.address:123/copsws/webservices/logcopseventV001?wsdl&resource=ICOPSSOAPWebService_PortType835.wsdl" namespace="http://service.ws.cops.bankofamerica.com/" />
2. JBoss node 2 generated during deployment import location as
<import location="https://bigip.test.address:123/copsws/webservices/logcopseventV001?wsdl&resource=ICOPSSOAPWebService_PortType123.wsdl" namespace="http://service.ws.cops.bankofamerica.com/" />
3. Client sends request to load WSDL. Load balancer load balances this request to node #1. Client sees
<import location="https://bigip.test.address:123/copsws/webservices/logcopseventV001?wsdl&resource=ICOPSSOAPWebService_PortType835.wsdl" namespace="http://service.ws.cops.bankofamerica.com/" />
4. Client sends request to load the document referred in import location
https://bigip.test.address:123/copsws/webservices/logcopseventV001?wsdl&resource=ICOPSSOAPWebService_PortType835.wsdl"
The load balancer sends the request to be handled by JBoss node #2. The request will fail because this resource doesn't exist on that node.
This demonstrates that is it not currently possible to create truly stateles environment where any request can be handled by any jboss node when JBoss generates the WSDL.
Two possiblities for fixes are use jboss-beans.xml to specify new property
<property name="wsdlmportLocationPostix">some_string</property>
or to allow specifiy property to do not use the import location and rather embed that portion of the WSDL inside of the WSDL
<property name="useImportLocation">true|false</property>