2015-11-06 4 views
0

У меня есть безстоящий EJB WebService.Получить IP-адрес клиента в Stateless EJB

WS интерфейс: реализация

@Remote 
@WebService 
public interface WSInterface{ 
    @WebMethod 
    public String[] WSMethod(@WebParam(name="arg0") String arg0) 
} 

WS:

@WebService 
@Stateless 
public class WSImpl extends GenericSessionBean implements WSInterface { 
    @WebMethod 
    public String[] WSMethod(String arg0) 
    { 
     return ...; 
    } 
} 

И мне нужно, чтобы получить IP-адрес клиента в WSMethod. Я пытался получить его таким образом (он работает в «общем» WebService):

@Resource 
private SessionContext ctx; 
public String[] getProperties() { 
    List propList = new ArrayList();  
    MessageContext mc = ctx.getMessageContext(); 
    Iterator props = mc.getPropertyNames(); 
    for (String prop = (String)props.next(); props.hasNext(); prop = (String)props.next()) 
     { propList.add(prop); } 
    return propList.toArray(new String[propList.size()]); 
} 

Но никакого успеха: нет свойства с именем REMOTE_ADDR в MessageContext.

Есть ли способ получить REMOTE_ADDR в @Stateless EJB?

ответ

0

Можете ли вы попытаться получить WebServiceContext вместо SessionContext с @Resource? У меня нет подходящего env, чтобы проверить его прямо сейчас

+0

@Resource private WebServiceContext ctx; ... MessageContext mc = ctx.getMessageContext(); HttpServletRequest request = (javax.servlet.http.HttpServletRequest) mc.get (MessageContext.SERVLET_REQUEST)); Строка clientIP = request.getRemoteAddr(); – callfarc0de

+0

Это так странно, но теперь ваше решение работает! Я помню, что раньше я уже пробовал WebServiceContext, но компилятор дал мне ошибку. Теперь он работает по мере необходимости. Благодаря! – Shniperson