序文
お客様にサービスAPIを提供しています。
各顧客には独自のサブドメイン(例:sergii.ourwebsite.com)と独自のWSDL URLがあり、http ://sergii.ourwebsite.com/api/bsapi.cfc?wsdlのようになります。
また、すべてのWebサイト(もちろんAPIを含む)は同じコードベースを使用しています。
問題
たとえば、同じCFサーバー上の2つのアプリケーション。一部のお客様のWebサイトは当社のサーバーでホストされているため、これは簡単に発生する可能性があります。
どちらも独自のAPIWSDLを使用しようとしています。たとえば、次のようになります。
http://sergii.ourwebsite.com/api/bsapi.cfc?wsdl
http://galashyn.ourwebsite.com/api/bsapi.cfc?wsdl
そして、ここに問題があります。
2番目のWebサイトがWebサービスを登録しようとすると、CFはエラーをスローします。
名前: https ://galashyn.ourwebsite.com/api/bsapi.cfc?wsdl 。WSDL: https ://galashyn.ourwebsite.com/api/bsapi.cfc?wsdl 。org.apache.axis.wsdl.toJava.DuplicateFileException:重複するファイル名:/opt/coldfusion8/stubs/WS1985941973/api/Bsapi.java。ヒント:同じ名前の要素を持つ2つの名前空間を同じパッケージ名にマップした可能性があります。Webブラウザーを使用して、要求されたWSDLドキュメントを取得および調査し、それが正しいことを確認することをお勧めします。要求されたWSDLドキュメントを取得できないか、動的に生成される場合は、ターゲットWebサービスにプログラミングエラーがある可能性があります。
問題は、両方がCFCパスから構築された同じWSDL名前空間を使用していることです。
<wsdl:definitions targetNamespace="http://api">
現在のソリューション
私たちにとって有効な唯一の解決策は、次のようなCFCエイリアスを使用することです。
http://galashyn.ourwebsite.com/api/v1n1/bsapi.cfc?wsdl
http://galashyn.ourwebsite.com/api/v1n1/bsapi.cfc?wsdl
この各CFCは、次のように親を拡張します。
<cfcomponent output="false" extends="api.bsapi">
<!--- this component used to extend base api version 1.x --->
</cfcomponent>
それらは異なる名前空間を生成し、問題なく使用できます-アプリケーションごとに独自の名前空間:
<wsdl:definitions targetNamespace="http://v1n1.api">
<wsdl:definitions targetNamespace="http://v1n2.api">
これはかなりばかげた回避策ですが、今のところは機能します。
他の解決策は、単一のAPIサブドメインを使用し、何らかのキーで顧客を識別することです(セキュリティ目的ですでに使用しています)が、レガシーコードが原因で、深刻な悪影響があります。
私はJavaを知らないので、具体的なアドバイスの多くは私にはそれほど明確ではないことに注意してください。
グーグルはこの問題が何年も存在することを示しています、しかし私は賢い解決策を見つけることができません。
だから多分ここ?