• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Multiple web services on single server causing object undefined errors

New Here ,
Oct 12, 2009 Oct 12, 2009

Copy link to clipboard

Copied

Hi,

I've currently got a bit of a strange problem within a web service that is proving difficult to debug.

There are the web service urls :

     api.domain.com                -> /var/www/html/api.domain.com/            -> CF mapping to MYSERVICE

     testapi.domain.com          -> /var/www/html/testapi.domain.com/     -> CF mapping to MYSERVICE_test

In both instances the cfcs that contain the code to be translated into a WSDL reside in /api/..., in the case of this example, /api/common.cfc.  wsargs constists simply of refreshwsdl true.

If I call the following 2 lines ...

     obj_myservice = CreateObject('webservice','http://api.domain.com/api/common.cfc?wsdl',wsargs);

     obj_myservice_test = CreateObject('webservice','http://testapi.domain.com/api/common.cfc?wsdl',wsargs);

I then call the same method in both, and they are successful.  When checking the "Data & Services" -> "Web Services" panel within the CF control panel, only the web service "http://api.domain.com/api/common.cfc?wsdl" is listed, and not testapi.domain.com......

If I reverse the order in which the WSDL's are loaded then this switches, and testapi.domain.com..... gets listed under "Web Services" but api.domain.com..... does not.  In essence it appears as though for some reason the CF server overwrites one with the other.  The exact "object undefined" error is proving difficult to reproduce reliably.

This appears to happen no matter which server is accessing the web service, be it the same server or a remote server.  All servers involved are running CF8.  Accessing the 2 WSDL files in a browser results in the 2 WSDLs being rendered correctly with different namespace values.

On the same server are 2 more services

     MYSERVICE2

     MYSERVICE2_test

These reside in the /api2 directories on the same 2 subdomains, api. and testapi.   MYSERVICE2 and MYSERVICE2_test appear to conflict with each other.  MYSERVICE and MYSERVICE_test appear to conflict with each other.  MYSERVICE and MYSERVICE2 do not appear to conflict with each other.

Is there a configuration change or anything like that which I should be aware of that would prevent me doing the above?  The 2 /api/ directories are nearly identical with the exception that the namespace and complex type names have been set to http://api.domain.com & MYSERVICE in the first, and http://testapi.domain.com & MYSERVICE_test in the second url.

I have also tried mapping /MYSERVICE and /MYSERVICE_test within /opt/coldfusion8/WEB-INF/jrun-web.xml to no avail.

Any help would be appreciated.  If there is any useful information that I have missed off please let me know and I'll dig it out.

- Simon H

TOPICS
Advanced techniques

Views

1.1K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 12, 2009 Oct 12, 2009

Copy link to clipboard

Copied

Hi,

As an extension to the above

Server                Test service         "Live" service

1 ("dev")                devtest                   devlive               http://dev(test/live).domain.com

2 ("test")                testtest                   testlive               http://test(test/live).domain.com

I currently have a test script (TEST1) that performs the following :

CreateObject + call method from devlive

CreateObject + call method from devtest

CreateObject + call method from testtest

The script errors on the third, when it attempts to call a method from devtest.  On the server on which this test script is running, by the end of this, there are the following 2 web services in the Coldfusion control panel :

http://devlive.domain.com/api/common.cfc?wsdl

http://testtest.domain.com/api/common.cfc?wsdl

I have a second test script (TEST2) on a second server distinctfrom the first test script server, on which the following is performed :

CreateObject + call method from testlive

If I execute TEST2, then it executes fine.  If I execute TEST1 straight after, then I receive the following error on TEST1

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Deserializing parameter 'objectFetchReturn':  could not find deserializer for type {http://common.types.WEBSERVICE_test}details

Where WEBSERVICE.types.common.details is a complex type (/api/types/common/details.cfc). If I then run the TEST2 script again straight after, the same error appears (with WEBSERVICE in place of WEBSERVICE_test).  If I execute TEST2 twice in a row, or TEST1 twice in a row, then the error disappears"test" server has got jrun-web.xml  edited to include the following, which "dev" does not.

  <virtual-mapping>
    <resource-path>/WEBSERVICE_test</resource-path>
    <system-path>/var/www/html/testapi.domain.com/api</system-path>
  </virtual-mapping>


  <virtual-mapping>
    <resource-path>/WEBSERVICE</resource-path>
    <system-path>/var/www/html/api.domain.com/api</system-path>
  </virtual-mapping>

I hope that this extended explaination helps.

Simon H

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 12, 2009 Oct 12, 2009

Copy link to clipboard

Copied

Hi,

As an extra bit, if I use the "Web Services" panel to define both web services and name them, and then CreateObject by name rather than url, this does not seem to cause errors, so I get a feeling this may be a solution.

Still doesn't really explain why this is the case though

- Simon H

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Oct 12, 2009 Oct 12, 2009

Copy link to clipboard

Copied

I suspect that you problem is caused by DNS lookups, CF gets requests for different web services (live/test/dev) but becuase the names are identical itattempts to reslove the names and gets one IP address/name only...

This is my theory...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 12, 2009 Oct 12, 2009

Copy link to clipboard

Copied

LATEST

I had originally considered that however it would not explain why the following 2 urls :

http://dev.domain.com/WEBSERVICE/common.cfc?wsdl

http://test.domain.com/WEBSERVICE_test/common.cfc?wsdl

didn't then result in 2 webservices benig set up.  I could understand if it went on the concept that it resolved dev.domain.com and test.domain.com to be the same IP and they had the same path.

Both WEBSERVICE and WEBSERVICE_test are mapped to /api/ within their relevant webroots.  For reference, the following is also acceptable :

http://dev.domain.com/WEBSERVICE_test/common.cfc?wsdl

http://test.domain.com/WEBSERVICE/common.cfc?wsdl

It could just be due to having messed up namespacing.  On the test copy I have hardcoded references to complex types and interfaces to link to WEBSERVICE_TEST.types....... and namespace to http://test.domain.com/WEBSERVICE_test/.  If there was a way to leave complex type/interface references to be a relative naming then that might help, however I have been unable to find one.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation