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 ファイルで同じメソッドを定義する必要もありますが、これはやりたくないことです。このコードを改善する方法について何か提案はありますか?
前もって感謝します。