1

アプリケーション構成:

  • 注釈付きの JAX-WS 2.0 Web サービスを作成する Java の最初の方法を使用する Web アプリケーション。
  • WebLogic 10.3

私の要件

私が持っている要件は、単一の Web サービス実装クラスをデプロイすることですが、サービスへのアクセス元の URL に基づいてロジックを変更することです。

質問: これを行う良い方法は、web.xml にさまざまなマッピングを展開し、さまざまなパラメーターでそれらを初期化することだと思います。より良い方法はありますか?

Web サービスへのアクセス元の URL からロジックをオフにする最善の方法は何ですか? 初期化パラメーターを使用して web.xml で 2 つのサーブレット マッピングを構成する必要がありますか (試してみましたが、機能しませんでした)、サービス実装で URL を解析する必要がありますか? 他の選択肢はありますか?

私が試したこと(しかしうまくいかなかった)

web.xml<init-param>の要素にを追加しようとしました。<servlet>ただし、ServletConfigWeb サービス内のオブジェクトにアクセスしてパラメーターを取得することはできません。Web サービスには、標準のすべての機能が備わっているわけではありません(またはServletを実装したとしても)。私は(そう思われる)にしかアクセスできず、そこからは要素しか取得できませんが、代わりに要素が必要になります。ServletServletContextListenerWebServiceContext<context-param><init-param>

web.xml では<servlet>、同じ Java クラスを使用して 2 つの要素を入力しますが、これらは次のように 2 つの異なる URL にマップされます。各サーブレット マッピングで「ソース」パラメータがどのように異なるかに注目してください。

<servlet>
    <servlet-name>Foo</servlet-name>
    <servlet-class>com.Foo</servlet-class>
    <init-param>
        <param-name>source</param-name>
   <param-value>1</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Foo</servlet-name>
    <url-pattern>/Foo</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Bar</servlet-name>
    <servlet-class>com.Foo</servlet-class>
   <init-param>
        <param-name>source</param-name>
   <param-value>2</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Bar</servlet-name>
    <url-pattern>/Bar</url-pattern>
</servlet-mapping>  
4

1 に答える 1

1

あなたは非常によく持っているかもしれませんがMessageContext、ソースが何であるかを決定するために実行時に使用しようとしましたか?

@WebService
public class CalculatorService implements Calculator
{

    @Resource
    private WebServiceContext context;

    @WebMethod
    public void getCounter()
    {
        MessageContext mc = wsContext.getMessageContext();
        // you can grab the HttpSession
        HttpSession session = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        // ...or maybe the path info is enough
        String path = mc.get(MessageContext.PATH_INFO);
        // the query itself should almost definitely be enough
        String query = (String) mc.get(MessageContext.QUERY_STRING);
    }

}

私はhttp://sirinsevinc.wordpress.com/category/jaxws/からアイデアを得ました。しかし、それを試していません。

于 2010-09-01T23:38:47.517 に答える