7

MuleESBを使用してWebサービスプロキシを構成しようとしています。

MuleのWSProxyServiceを使用してこれを実行しようとしていますが、対応するコードを(デバッガーで)ステップスルーした後、このクラスがエンドポイントアドレスを置き換えることは明らかです。

問題はSpringです-WSWSDLアドレスのスタイルはhttp://xxxx/xxxx.wsdlですが、WSProxyServiceはhttp:// xxxx / xxxx?wsdlまたはhttp:// xxxx / xxxx&wsdlを想定しています。リモートエンドポイントアドレスをローカルWSDLアドレスに置き換えます。疑問符でリモートWSDLアドレスを切り取ります。つまり、「?WSDL」は切り落とされることを目的としているため、検索語を作成します。しかし、Spring-WSのため、これは機能しません。

それを分解するには:

WSProxyServiceは最終的に使用しようとします

http://xxxx/xxxx.wsdl

交換する

http://xxxx/xxxx

http://yyyy/yyyy

これは失敗します...実際のWebサービス呼び出しがプロキシ経由ではなく直接行われることになります。

誰かがこの問題に気づいた/解決したことがありますか?

乾杯、ダレン

4

4 に答える 4

5

URL とパラメーターをチェックする Spring WS サーブレットの前にあるサーブレット フィルターはどうですか?

一致する場合は WSDL を返します。一致しない場合は、何も起こらなかったかのように要求を通過させます。

WS + ?WSDL の URL を絶対に追加する必要がある場合、これは簡単に実装でき、ニーズを満たすことができます。

コードは次のとおりです。

public class WsdlQueryCompatibilityFilter implements Filter {
    @Override
    public void init(final FilterConfig filterConfig) throws ServletException {
        // do nothing
    }

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
            throws IOException, ServletException {
        final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        if ("GET".equals(httpServletRequest.getMethod())
                && "wsdl".equalsIgnoreCase(httpServletRequest.getQueryString())) {
            httpServletRequest.getSession().getServletContext().getRequestDispatcher("/ws.wsdl")
                    .forward(request, response);
        } else {
            chain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {
        // do nothing
    }
}
于 2010-11-18T13:42:24.533 に答える
1

これは適用される場合があります:

http://forum.springsource.org/showpost.php?p=101967&postcount=4

いいえ、?WSDL はクラスの WSDL を取得する方法です。SWS では、サービスはクラスとして実装されません。

于 2009-11-05T16:50:42.233 に答える