"Nombre de archivo duplicado" para el mismo espacio de nombres WSDL cuando se usa el servicio web de diferentes subdominios

Prefacio

Estamos proporcionando a los clientes nuestro servicio API.

Cada cliente tiene su propio subdominio (por ejemplo, sergii.ourwebsite.com) y su propia URL de WSDL, parece quehttp://sergii.ourwebsite.com/api/bsapi.cfc?wsdl

Además, todos los sitios web (incluida la API, por supuesto) que utilizan el mismo código base.


Problema

Digamos, dos aplicaciones en el mismo servidor CF. Esto puede suceder fácilmente, porque algunos de los sitios web de clientes están alojados en nuestros servidores.

Ambos intentan usar su propia API WSDL, digamos:

http://sergii.ourwebsite.com/api/bsapi.cfc?wsdl
http://galashyn.ourwebsite.com/api/bsapi.cfc?wsdl

Y aquí vienen los problemas.

Cuando el segundo sitio web intenta registrar el servicio web, CF emite un error:

Nombre:https://galashyn.ourwebsite.com/api/bsapi.cfc?wsdl. WSDL:https://galashyn.ourwebsite.com/api/bsapi.cfc?wsdl. org.apache.axis.wsdl.toJava.DuplicateFileException: Nombre de archivo duplicado: /opt/coldfusion8/stubs/WS1985941973/api/Bsapi.java. Sugerencia: es posible que haya asignado dos espacios de nombres con elementos del mismo nombre al mismo nombre del paquete. Se recomienda que use un navegador web para recuperar y examinar el documento WSDL solicitado para asegurarse de que sea correcto. Si el documento WSDL solicitado no se puede recuperar o se genera dinámicamente, es probable que el servicio web de destino tenga errores de programación.

El problema es que ambos utilizan el mismo espacio de nombres WSDL, creado a partir de la ruta de acceso de CFC:

<wsdl:definitions targetNamespace="http://api">


Solución actual

La única solución de trabajo para nosotros es usar los alias de CFC, como:

http://galashyn.ourwebsite.com/api/v1n1/bsapi.cfc?wsdl
http://galashyn.ourwebsite.com/api/v1n1/bsapi.cfc?wsdl

Cada uno de estos CFC extiende al padre así:

<cfcomponent output="false" extends="api.bsapi">
<!--- this component used to extend base api version 1.x --->
</cfcomponent>

Producen diferentes espacios de nombres, que se pueden usar sin problemas: espacio de nombres propio para cada aplicación:

<wsdl:definitions targetNamespace="http://v1n1.api">
<wsdl:definitions targetNamespace="http://v1n2.api">


Esta es una solución bastante tonta, pero funciona por ahora.


Otra solución sería utilizar el subdominio de la API única e identificar a los clientes con alguna clave (ya los estamos utilizando por motivos de seguridad), pero tiene graves problemas negativos para nosotros debido a algún código heredado.


Tenga en cuenta que no conozco Java, así que muchos consejos específicos no son tan claros para mí.

Google muestra que este problema existe desde hace años, pero no puedo encontrar la solución inteligente.

Así que tal vez aquí?

Respuestas a la pregunta(4)

Su respuesta a la pregunta