ローカルの service.wsdl でも、構築中に SoapClient がリモートの文書を取得することがあります。最初のファイルをローカルにしても、消えるのはその最初のダウンロードだけです:

local service.wsdl
  → internal Common.xsd
  → external Types.xsd
       → another schema location

最初の SOAP 業務呼び出しの前に、最初に失敗した取得から始めてください。WSDL の import と schema location をすべて列挙し、それらがさらに参照する文書も含めます。相対参照を解決するために使われる基底 URL またはパスを記録しておきます。内部ホストと、本当に外部 proxy を必要とするリソースを分けてください。

明示的な SoapClient proxy は、DNS の見え方やアクセス ポリシーが異なる仲介者を通して内部 schema を送ることがあります。プロセス単位の no_proxy 変数は、この読み込み経路がそれを読むことを証明しません。お使いの PHP バージョンで文書化されているオプションを使ってください。環境変数にちなんでオプションを命名しても、import ごとの選択子にはなりません。

定義を完全にローカルに配置するには、依存関係一式の承認済みバージョンを入手し、該当する import の位置をローカル バンドルに更新し、相対パスの基底を保ってください。新しいルート WSDL が古い型を使わないよう、それらの文書はまとめてバージョン管理します。

namespace の識別子はそのままにしてください。URL に見えても、それは schema の語彙を識別するもので、ローダーにファイルの取得先を伝えるものではありません。置き換えるとサービスの契約が変わり得ます。

キャッシュの状態を記録したうえで構築を再テストしてください。キャッシュされた定義は、あるマシンでの依存関係の欠落を隠すことがあります。サービス URL の上書きは後の段階に適用され、独自の __doRequest() は SOAP のやり取りを扱います。どちらも構築時のすべての schema ダウンロードを書き換えたり横取りしたりするものと想定してはいけません。

関連記事