ДжерсиТест с Широ
Создание JerseyTest с этим классом
public class NMAAbstractRestTest extends JerseyTest {
@Override
protected Application configure() {
NMAdaptorApplication application = new NMAdaptorApplication();
return application;
}
}
NMAdaptorApplication конструктор.
public NMAdaptorApplication() {
log.info("NM-Adaptor-Application is being initilized....");
register(NMRestExceptionMapper.class);
register(ShiroFeature.class);
register(NMMarshallingFeature.class);
register(new LoggingFeature(java.util.logging.Logger.getLogger("nma"), LoggingFeature.Verbosity.PAYLOAD_ANY));
packages(true, "com.retailwave.rwos.nma.rest.resource");
loadProperties();
}
при выполнении следующего метода испытаний
@Test
public void makeOrder()
{
...
Entity entity = Entity.entity(orderContent, MediaType.APPLICATION_JSON);
WebTarget target = target("customerorders");
target.path("");
target.queryParam("cmd", "create");
target.queryParam("branchCode", "610");
arget.property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_USERNAME, "admin");
target.property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_PASSWORD, "admin");
Response response = target.request().post(entity);
}
получить следующее исключение
16:34:23.893 ОШИБКА [grizzly-http-server-0] crrneNMRestExceptionMapper - Исключение, обнаруженное в Mapper: SecurityManager не доступен для вызывающего кода, привязан ли он к org.apache.shiro.util.ThreadContext или как статический синглтон vm. Это неверная конфигурация приложения. org.apache.shiro.UnavailableSecurityManagerException: SecurityManager не доступен для вызывающего кода, привязан ли он к org.apache.shiro.util.ThreadContext или как статический синглтон vm. Это неверная конфигурация приложения. в org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123) в org.apache.shiro.subject.Subject$Builder.(Subject.java:627)
Я думаю, это из-за фильтра Широ, который я настроил в web.xml
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
в то время как тест JUnit это терпит неудачу. Есть ли возможность включить web.xml в JerseyTest
1 ответ
Я не знаю, решит ли это проблему, так как я не использую Shiro, но если вы хотите настроить вещи, которые иначе были бы настроены в web.xml, вам нужно проделать немного больше работы.
Сначала нужно запустить тест в контейнере сервлета. Предполагая, что вы используете Grizzly (обратите внимание, это невозможно с помощью провайдера в памяти), вам нужно использовать GrizzlyWebTestContainerFactory
@Override
protected TestContainerFactory getTestContainerFactory() {
return new GrizzlyWebTestContainerFactory();
}
Затем вам нужно настроить DeploymentContext
, Здесь вы можете сделать свои конфигурации сервлет-контейнера
@Override
protected DeploymentContext configureDeployment() {
// just configure the ResourceConfig here instead of the `configure`.
final ResourceConfig config = new ResourceConfig();
return ServletDeploymentContext
.forServlet(new ServletContainer(config))
.addFilter(ShiroFilter.class, "ShiroFilter")
.build();
}
Смотрите также: