首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用arquillian测试REST web服务

用arquillian测试REST web服务
EN

Stack Overflow用户
提问于 2013-03-08 13:53:53
回答 1查看 3.8K关注 0票数 1

我们希望使用arquillian测试REST API。

我们用玻璃鱼生产和阿基利安。

对于我们公开的一些JMS队列,我们已经有了arquillian测试,这很好,所以我们至少有一些基本的正确。当我们开始使用该设置进行REST测试时,在REST URLS上发送的第一个HTTP中,我们得到了异常:com.sun.jersey.api.container.ContainerException: No WebApplication provider is present.

下面是我们的ShrinkWrap设置:

代码语言:javascript
复制
 public static WebArchive createTestArchive() {
    return ShrinkWrap.create(WebArchive.class, "test.war") // Create jar
            .addPackages(true, "<our packages, plus some dependencies>") //, "com.ocpsoft.pretty")
            .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") // b
            .setWebXML("WEB-INF/web.xml")
            .addAsWebInfResource("WEB-INF/faces-config.xml")
            //.addAsWebInfResource(new StringAsset("<faces-config version=\"2.0\"/>"), "faces-config.xml")
            .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml");

}

我认为我们的web.xml是相关的:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>    
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>


    <!-- Pretty faces config -->

    <filter>
        <filter-name>Pretty Filter</filter-name>
        <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
        <async-supported>true</async-supported>
    </filter>

    <filter-mapping>
        <filter-name>Pretty Filter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>ERROR</dispatcher>
        <dispatcher>ASYNC</dispatcher>
    </filter-mapping>

    <!-- disable annotation scanning by the PrettyFaces module -->
    <context-param>
        <param-name>com.ocpsoft.pretty.BASE_PACKAGES</param-name>
        <param-value>none</param-value>
    </context-param>

</web-app>

编辑:由于这个问题,我现在已经更改为glassfish-embedded 3.1.1,并根据新的错误消息更新了问题。我们的主要操作是用玻璃鱼3.1.2。

还请注意,我们首先收到一个警告:

代码语言:javascript
复制
WARNING: Could not instantiate service class org.glassfish.osgicdi.impl.OSGiServiceExtension
java.lang.NoClassDefFoundError: org/osgi/framework/ServiceException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)

。。

代码语言:javascript
复制
Caused by: java.lang.ClassNotFoundException: org.osgi.framework.ServiceException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

(但似乎忽略该警告是安全的,请查看该警告及其链接到的bug:http://www.java.net/forum/topic/glassfish/glassfish/could-not-instantiate-service-class-orgglassfishosgicdiimplosgiserviceextension?force=217)

然后是错误:

代码语言:javascript
复制
SEVERE: WebModule[/test]StandardWrapper.Throwable
com.sun.jersey.api.container.ContainerException: No WebApplication provider is present
    at com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebApplicationFactory.java:69)
    at com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContainer.java:391)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.create(ServletContainer.java:306)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 17:01:19

好的,在Gab的评论的帮助下,我解决了这个问题。这句话让我专注于软件包的版本,我意识到,我们用于生产的glassfish 3.1.2使用的是jersey 1.11,而glassfish-embedded 3.1.1,我们现在用于测试(因为在本文编写时还没有3.1.2 ),使用了jersey 1.8。

因此,我将以下依赖项添加到我们的pom.xml的测试部分:

代码语言:javascript
复制
 <!-- glassfish 3.1 ships with jersey 1.8, hence the version here. -->
 <dependency>
     <groupId>com.sun.jersey</groupId>
     <artifactId>jersey-server</artifactId>
     <version>1.8</version>
     <scope>provided</scope>
  </dependency>
  <dependency>
     <groupId>com.sun.jersey.contribs</groupId>
     <artifactId>jersey-multipart</artifactId>
     <version>1.8</version>
  </dependency> 
  <dependency>
     <groupId>com.sun.jersey</groupId>
     <artifactId>jersey-json</artifactId>
     <version>1.8</version>
  </dependency> 

在pom.xml的主要部分中,我将依赖项留给jersey,指向Jersey1.11。

现在问题解决了。

我希望我们能得到一个更好的错误信息,这样的问题!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15295542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档