3

内部環境の Tomcat で Java Web サービスを実行しています。wsdlが

http://actual:8080/app/temp?wsdl

ネットワークの外部からこの Web サービスへのアクセスを提供するために、別のサーバーで Apache を使用してプロキシを作成し、ProxyPass を使用して次のようなことを行いました。

ProxyPass /app/temp http://actual:8080/app/temp

そのため、http 経由で外部から proxy/app/temp にアクセスすると、actual:8080/app/temp に転送されます。それで問題はなく、wsdlにもアクセスできます。

ただし、WSDL には、ポートの「Web サービスの場所」の「実際の」サーバーへの参照があります。これにより、クライアントから Web サービス メソッドへの実際の呼び出しが行われるときにエラーが発生します。

これを修正する方法についてのアイデアはありますか? ありがとう。

注: クライアントは Metro を使用して生成されます。以下のようなコードを使用して、クライアントで別のエンドポイントを強制する方法を見つけました。しかし、Web サービスを使用する開発者がコードに手を加える代わりに、私たちができる純粋なプロキシ ソリューションをもっと探しています。

((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://proxy/app/temp?wsdl");
4

1 に答える 1

4

ProxyPreserveHostディレクティブを使用できます。リンクのディレクティブのセクションから引用:

有効にすると、このオプションは、ProxyPass 行で指定されたホスト名の代わりに、着信要求からプロキシされたホストに Host: 行を渡します。

したがって、構成ファイルに次の内容を含める必要があります。

ProxyPreserveHost On
ProxyPass /app/temp http://actual:8080/app/temp

そしてApacheサーバーを再起動します。このオプションを使用すると、Web サービス関連のコードや設定を変更する必要はありません。

于 2012-12-04T21:45:52.703 に答える