0

I am trying to run integration tests on my scim restful server implementation via an embedded jetty server and apache wink REST Client but failing to run the tests. Here is my EmbeddedServerBase class

package org.picketlink.test.scim;

import java.net.URL;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.bio.SocketConnector;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.FilterMapping;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
import org.junit.After;
import org.junit.Before;
import org.picketlink.scim.PicketLinkSCIMApplication;

public class EmbeddedWebServerBase {
protected Server server = null;

@Before
public void setUp() throws Exception {
    // Start the Jetty embedded container
    server = new Server();

    server.setConnectors(getConnectors());

    this.establishUserApps();

    server.start();
}

@After
public void tearDown() throws Exception {
    if (server != null) {
        server.stop();
        try {
            server.destroy();
        } catch (Exception e) {
            //Don't bother
        }
        server = null;
    }
}

/**
 * Return the connectors that need to be configured on the server. Subclasses can create as many connectors as they want
 *
 * @return
 */
protected Connector[] getConnectors() {
    Connector connector = new SocketConnector();
    connector.setPort(11080);
    return new Connector[] { connector };
}

/**
 * Establish the user applications - context, servlets etc
 */
protected void establishUserApps() {
    ClassLoader tcl = Thread.currentThread().getContextClassLoader();
    if (tcl == null) {
        tcl = getClass().getClassLoader();
    }

    final String WEBAPPDIR = "scim";

    final String CONTEXTPATH = "/*";

    // for localhost:port/admin/index.html and whatever else is in the webapp directory
    final URL warUrl = tcl.getResource(WEBAPPDIR);
    final String warUrlString = warUrl.toExternalForm();

    WebAppContext context = createWebApp(CONTEXTPATH, warUrlString);
    context.setClassLoader(getClass().getClassLoader());
    context.setExtraClasspath(warUrlString + "/..");

    context.setConfigurationClasses(new String[] { "org.eclipse.jetty.webapp.WebInfConfiguration",
            "org.eclipse.jetty.webapp.WebXmlConfiguration", "org.eclipse.jetty.webapp.MetaInfConfiguration",
            "org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration",
            //"org.eclipse.jetty.plus.webapp.PlusConfiguration",
            "org.eclipse.jetty.webapp.JettyWebXmlConfiguration", "org.eclipse.jetty.webapp.TagLibConfiguration" });

    context.setContextPath("/");

    ServletHolder servletHolder = new ServletHolder(new HttpServletDispatcher());
    servletHolder.setInitParameter("javax.ws.rs.Application", PicketLinkSCIMApplication.class.getName());
    context.addServlet(servletHolder, "/*");

    server.setHandler(context);
}

protected FilterMapping createFilterMapping(String pathSpec, FilterHolder filterHolder)      {
    FilterMapping filterMapping = new FilterMapping();
    filterMapping.setPathSpec(pathSpec);
    filterMapping.setFilterName(filterHolder.getName());
    return filterMapping;
}

protected WebAppContext createWebApp(String contextPath, String warURLString) {
    WebAppContext webapp = new WebAppContext();
    webapp.setContextPath(contextPath);
    webapp.setWar(warURLString);

    Thread.currentThread().setContextClassLoader(webapp.getClassLoader());
    return webapp;
}
}

The exception is most probably thrown at "webapp.getClassLoader()" in Thread.currentThread().setContextClassLoader(webapp.getClassLoader());

Here is a snippet from CrudTest.java

package org.picketlink.scim.restful.client.test;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.picketlink.scim.core.entities.ObjectFactory;
import org.picketlink.scim.restful.client.Client;
import org.picketlink.scim.restful.client.Tests;
import org.picketlink.test.scim.EmbeddedWebServerBase;

public class CrudTest extends EmbeddedWebServerBase {
private Client client = null;
private ObjectFactory factory = null;

@Before
public void onBefore() {
    // create a client to send the user/group crud requests
    client = new Client("http://localhost:11080/scim", "matt", "password");

    // create an object factory to create the user/group objects
    factory = new ObjectFactory();
}

@Test
public void testBasicCrud() {
    // test the create user functionality
    String gid = Tests.createGroupTest(client, factory);
}
}

Here is a snippet from Client.java

import javax.ws.rs.core.MediaType; 
import javax.xml.bind.JAXBElement;

import org.picketlink.scim.core.entities.Group;
import org.picketlink.scim.core.entities.ObjectFactory;
import org.picketlink.scim.core.entities.User;

import org.apache.wink.client.ClientConfig;
import org.apache.wink.client.ClientResponse;
import org.apache.wink.client.Resource;
import org.apache.wink.client.RestClient;

public class Client {
private ObjectFactory factory = null;
private ClientConfig config = null;
private RestClient client = null;
private String url = null;

public Client(String url, String username, String password) {
    // setup the object factory
    factory = new ObjectFactory();

    // setup the client config
    config = new ClientConfig();

    // setup the rest client
    client = new RestClient(config);

    // remove any trailing slash
    url = url.replaceAll("/$", "");

    // store the url for later
    this.url = url;
}
//Other methods
}

Exception is most probably thrown at:

client = new RestClient(config);

The Stacktrace

java.lang.NullPointerException
        at org.apache.wink.common.internal.utils.FileLoader.loadFileUsingClassLoaders(FileLoader.java:130)
        at org.apache.wink.common.internal.utils.FileLoader.loadFileAsStream(FileLoader.java:96)
        at org.apache.wink.common.internal.application.ApplicationFileLoader.<init>(ApplicationFileLoader.java:97)
        at org.apache.wink.common.internal.application.ApplicationFileLoader.<init>(ApplicationFileLoader.java:66)
        at org.apache.wink.client.ClientConfig$1.run(ClientConfig.java:112)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.wink.client.ClientConfig.initDefaultApplication(ClientConfig.java:109)
        at org.apache.wink.client.ClientConfig.clone(ClientConfig.java:408)
        at org.apache.wink.client.RestClient.<init>(RestClient.java:81)
        at org.picketlink.scim.restful.client.Client.<init>(Client.java:60)
        at org.picketlink.scim.restful.client.test.CrudTest.onBefore(CrudTest.java:35)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.apache.maven.surefire.junitcore.pc.Scheduler$1.run(Scheduler.java:318)
        at org.apache.maven.surefire.junitcore.pc.InvokerStrategy.schedule(InvokerStrategy.java:41)
        at org.apache.maven.surefire.junitcore.pc.Scheduler.schedule(Scheduler.java:274)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.junit.runners.Suite.runChild(Suite.java:128)
        at org.junit.runners.Suite.runChild(Suite.java:24)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.apache.maven.surefire.junitcore.pc.Scheduler$1.run(Scheduler.java:318)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

Here is the link to complete log

Joakim Erdfelt
  • 46,896
  • 7
  • 86
  • 136
Giriraj Sharma
  • 305
  • 3
  • 13
  • Comment out `context.setClassLoader(getClass().getClassLoader());` and try again. – Joakim Erdfelt Sep 30 '14 at 13:34
  • Commenting out didn't help. It seems that the problem is with apache-wink client while loading file using classLoaders(although not sure). Embedded jetty should be fine. – Giriraj Sharma Sep 30 '14 at 13:40

0 Answers0