Webservices 的一些新手,但这是一个棘手的问题,我正在努力寻找更好的实现方法。请参见下面的代码:不必setClientIPAddress
在每个 web 服务方法上调用该方法,有没有办法只做一次?即我尝试了以下内容:
// 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);
}
但我收到以下错误:“带有修饰符的非法访问异常”。
但是,将方法声明为公共还需要在 bean/wsdl 文件中定义相同的方法,这不是我想做的。有关如何改进此代码的任何建议?
提前致谢。