【问题标题】:JAX-WS Webservice Class initialisation block in aJAX-WS Webservice 类初始化块
【发布时间】:2012-05-28 10:42:07
【问题描述】:

Web 服务方面的一些新手,但这是一个棘手的问题,我正在努力寻找更好的实施方式。请参阅下面的代码:不必在每个 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);
        }

但我收到以下错误:“带有修饰符的非法访问异常”。

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

提前致谢。

【问题讨论】:

  • 你不能在另一个类中实现这个吗?然后只有当它为空时才必须设置其中的静态变量clientAddressIP......您可以设置它,以便在getClientAddressIP时检查它是否为空,然后设置它并返回......否则返回clientIPAddress。这是一个很好的单例类案例,它将包含您的静态字符串 clientIPAddress.. 和其他此类变量
  • 嗨 Nav,尝试了一些使用静态变量的方法,但没有奏效。
  • 尝试静态变量时发生了什么?
  • 在上面的问题中添加静态故障详细信息。将进一步帮助所有人,努力解决问题
  • 这对我来说似乎是一个产品问题。 PostConstruct 应该可用于非公共方法。

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


【解决方案1】:

试试:

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

【讨论】:

  • 完美!只需将方法更改为公共。谢谢!乔纳森
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多