2015-08-27 2 views
0

Итак, я недавно начал использовать Wicket, и я пытаюсь сделать вызов REST для настройки конечной точки с помощью RestEasy. Я могу сделать вызов и может видеть его получить успешно удар, но при попытке использовать компоненты Wicket я получаю следующее сообщение об ошибке ...Использование Wicket в вызове REST

org.apache.wicket.WicketRuntimeException: There is no application attached to current thread

Я предполагаю, что это потому, что я вхожу приложение через точку, которая не управляется Wicket. Я попытался обойти проблему, проигнорировав Wicket, но она настолько тесно связана с нашими данными, что я не могу найти способ обойти это без перезаписи тонны существующего кода.

Есть ли способ, которым я могу сообщить Wicket, что ему нужно управлять этой конечной точкой, или способ, которым я могу получить контекст приложения, когда я нахожусь в моей службе REST?

Вот некоторые соответствующие коды.

@POST 
@Path("/generate/{num}") 
@Produces("text/plain") 
@RolesAllowed({ 
     AuthorizeRole.ROLE 
}) 
public Response generate(@PathParam("num") String num) throws Exception { 
    Response response; 
    Type incomingType = getType(reportBn); 

    if(!incomingType.equals(Type.type)) { 
     response = Response.status(Response.Status.BAD_REQUEST).entity("Could not process request").build(); 
     return response; 
    } 

    SomeObject newObj = new SomeObject(num); 

    //This will cause the error, but it's actually 
    //getting called later, this is just to show why it's thrown. 
    Application.get(); 

    response = Response.ok(newObj.getNum()).build(); 
    return response; 
} 
+0

Рассматривали ли вы использование [wicketstuff-restannotations] (https://github.com/wicketstuff/core/tree/master/wicketstuff-restannotations-parent)? –

ответ

1

Хотя вы нашли способ, которым я поделился бы с вами официальным/разработанным способом для этого: https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/WicketSessionFilter.java Просто убедитесь, что WicketSessionFilter выполняется вокруг фильтра/сервлета RestEasy.

Дополнительным преимуществом является то, что вы также имеете доступ к сеансу Wicket.

+0

Почему бы вам не показаться на 8 часов раньше: D ... Я предпочитаю ваш метод, я просто не могу понять, как правильно подключить его в моем web.xml ... – Shaded

+0

Nevermind Я думаю Я понял! Добавлен 'filter', который использовал' WicketSessionFilter', а затем в 'filter-mapping' я использовал' servlet-name', чтобы указать его на мой сервлет resteasy. Это намного чище, чем то, что я делал! Большое спасибо! – Shaded

0

Итак, после нескольких часов исследований и не найдя подсказки, я думал, что попробую что-нибудь с ума. Использование Spring @Autowired для подключения Application к моему классу. Aaaaand он работал ... вот почему ...

В нашей установке Spring мы Заявка определена как боб, как так ...

<bean id="wicketApplication" class="... class that extends WebApplication"> 
    .... 
</bean> 

Мы используем пользовательский класс приложений, так что я не знаю, как выглядят другие установки, но это сработало как шарм!

Надеюсь, это поможет кому-то в будущем!

Смежные вопросы