2015-10-01 3 views
0

Что-то не так в этой программе?Исключение NullPointer при вызове webservice в игровой системе

Я получаю nullPointerException при вызове веб-службы в игровой системе в версии 2.4.3.

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

} 

ответ

2

Вопрос заключается в том, что ваш Sample класс не доступен в контексте введения вашей зависимости - Я предполагаю, что Guice. Есть несколько способов решить эту проблему, но проще всего создать интерфейс Sample и связать его реализацию, SampleImpl, используя Guice, чтобы он был доступен для вложенных зависимостей. Я собираюсь предположить, что это порождается с контроллера, поэтому вы можете ввести 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

+0

Или он мог бы просто расширить Controlle р. Но хорошо работать с интерфейсом. – sebster

Смежные вопросы