【问题标题】:NullPointer Exception while calling webservice in play framework在播放框架中调用 web 服务时出现 NullPointer 异常
【发布时间】:2016-04-21 19:20:19
【问题描述】:

这个程序有什么问题吗?

我在 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();
}

}

【问题讨论】:

    标签: java web-services playframework


    【解决方案1】:

    问题是您的 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

    【讨论】:

    • 或者他可以扩展控制器。但最好针对接口编写代码。
    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多