在play框架中调用webservice时出现NullPointer异常

时间:2015-10-01 06:31:46

标签: java web-services playframework

这个程序有什么不对吗?

我在版本2.4.3中的play框架中调用web服务时获得nullPointerException

package com.enkindle.box;

import javax.inject.Inject;

import play.libs.ws.WSClient;

/**
 * @author thirumal
 *
 */
public class Sample {

@Inject WSClient ws;   

public static void main(String[] args) {
    Sample sample = new Sample();
    sample.callAPI();
}

public void callAPI() {
    ws.url("www.thomas-bayer.com/sqlrest/CUSTOMER/").get();
}

}

1 个答案:

答案 0 :(得分:2)

问题是你的Sample课程在你的依赖注入的上下文中是不可用的 - 我假设是Guice。有几种方法可以解决这个问题,但最简单的方法是使用Guice创建一个Sample接口并绑定其实现SampleImpl,以便它可用于注入依赖项。我将假设这是从控制器生成的,因此您可以将Sample注入控制器并从那里点击callApi()方法。

控制器:

public class SampleController extends Controller {
    @Inject Sample sample;

    public Promise<Result> apiCall() {
        sample.callApi();
        return promise(() -> ok());
    }
}

接口:

@ImplementedBy(SampleImpl.class)
public interface Sample {
    public void callApi();
}

接口实现:

public class SampleImpl implements Sample {
    @Inject WSClient ws;

    @Override
    public void callApi() {
        // ws should not be null
        ws.url("www.thomas-bayer.com/sqlrest/CUSTOMER/").get();
    }
}

参考文档:https://www.playframework.com/documentation/2.4.x/JavaDependencyInjection#Binding-annotations