0

Web サービスの初心者ですが、より良い実装方法を見つけるのに苦労しているトリッキーなものを次に示します。以下のコードを参照してください:setClientIPAddress各 webservice メソッドでメソッドを呼び出す代わりに、これを一度だけ行う方法はありますか? つまり、次のことを試しました:

// initialisation block
{
   WSBean wsBean = new WSBean();
   wsBean.setClientIPAddress(getClientIPAdd);

}

これは正常にコンパイルされますが、実行時エラーが発生します。Webservice クラスは、初期化ブロックが気に入らないようです。

@javax.jws.WebService(targetNamespace = "http://baseentity.com/", serviceName = "WSBeanService", portName = "WSBeanPort", wsdlLocation = "WEB-INF/wsdl/WSBeanService.wsdl")
public class WSBeanDelegate {

    WSBean wsBean = new WSBean();

    public String getBaseInfoList(String baseID) {
      wsBean.setClientIPAddress(getClientIPAdd); // 
        return wsBean.getBaseInfoList(transactionID);
    }

    public String getBaseEntityInfo(String entityID) {
      wsBean.setClientIPAddress(getClientIPAdd);
        return wsBean.getBaseEntityInfo(entityID);
    }

    @WebMethod 
      private String getClientIPAdd()
      {
        MessageContext mc = this.wsContext.getMessageContext();

        HttpServletRequest req = (HttpServletRequest)mc.get("javax.xml.ws.servlet.request");
        return req.getRemoteAddr();
      }

以下に示すように、@PostContruct を使用してみました。

 @PostContruct
        private void init()
        {
              wsBean.setClientIPAddress(getClientIPAdd);
        }

しかし、次のエラーが表示されます:「非公開の修飾子を使用したillegalaccessexception」。

ただし、メソッドを public として宣言するには、bean/wsdl ファイルで同じメソッドを定義する必要もありますが、これはやりたくないことです。このコードを改善する方法について何か提案はありますか?

前もって感謝します。

4

1 に答える 1

1

試す:

@PostContruct
@javax.jws.WebMethod(exclude=true)
public void init()
{
    wsBean.setClientIPAddress(getClientIPAdd);
}
于 2012-05-29T16:06:55.950 に答える