JAX-WS Webservice类初始化块

时间:2012-05-28 10:42:08

标签: java web-services java-ee jax-ws websphere-7

Webservices上的一些新手,但这是一个棘手的问题,我正在努力寻找更好的实施方法。请参阅下面的代码:有没有必要在每个Web服务方法上调用 setClientIPAddress 方法,有没有办法只执行一次? 即我尝试了以下内容:

// 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);
        }

但是我收到以下错误:“非法修改私有的nongalaccessexception”。

但是,将该方法声明为public也需要在bean / wsdl文件中定义相同的方法,这不是我想做的。有关如何改进此代码的任何建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

尝试:

@PostContruct
@javax.jws.WebMethod(exclude=true)
public void init()
{
    wsBean.setClientIPAddress(getClientIPAdd);
}