org.apache.wink.common.internal.utils.FileLoader.loadFileUsingClassLoaders上的java.lang.NullPointerException

org.apache.wink.common.internal.utils.FileLoader.loadFileUsingClassLoaders上的java.lang.NullPointerException,java,nullpointerexception,jetty,rest-client,apache-wink,Java,Nullpointerexception,Jetty,Rest Client,Apache Wink,我试图通过嵌入式jetty服务器和apache wink REST客户端在我的scim REST服务器实现上运行集成测试,但未能运行测试。这是我的EmbeddedServerBase类 package org.picketlink.test.scim; import java.net.URL; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclips

我试图通过嵌入式jetty服务器和apache wink REST客户端在我的scim REST服务器实现上运行集成测试,但未能运行测试。这是我的EmbeddedServerBase类

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;
}
}
异常很可能在Thread.currentThread.setContextClassLoaderwebapp.getClassLoader中的webapp.getClassLoader处引发

下面是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);
}
}
下面是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
}
异常很可能是在以下位置引发的:

client = new RestClient(config);
堆栈跟踪

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)

下面是完成注释上下文的链接

setClassLoadergetClass.getClassLoader;然后再试一次。评论没有帮助。问题似乎是apache wink客户端在使用类加载器加载文件时出现的,尽管不确定。嵌入式码头应该是好的。