Guice没有初始化财产

时间:2014-10-22 18:02:16

标签: java nullpointerexception guice

我刚刚和Guice在一起 我想使用Guice初始化对象而不直接编写new

这是我的 main()

public class VelocityParserTest {    
    public static void main(String[] args) throws IOException {
        try {
            PoenaRequestService poenaService = new PoenaRequestService();
            System.out.println(poenaService.sendRequest("kbkCode"));
        } catch (PoenaServiceException e) {
            e.printStackTrace();
        }
    }
}

PoenaRequestService

public class PoenaRequestService {

    private static final String TEMPLATE_PATH = "resources/xml_messages/bp12/message01.xml";
    public static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PoenaRequestService.class);

    @Inject
    @Named("poena_service")
    private HttpService poenaService;

    public String sendRequest(/*TaxPayer taxPayer,*/ String kbk) throws PoenaServiceException {
        LOG.info(String.format("Generating poena message request for string: %s", kbk));

        Map<String, String> replaceValues = new HashMap<>();
        replaceValues.put("guid", "guid");
        replaceValues.put("iinbin", "iinbin");
        replaceValues.put("rnn", "rnn");
        replaceValues.put("taxOrgCode", "taxOrgCode");
        replaceValues.put("kbk", "kbk");
        replaceValues.put("dateMessage", "dateMessage");
        replaceValues.put("applyDate", "applyDate");   
        ServiceResponseMessage result;
        try {
            String template = IOUtils.readFileIntoString(TEMPLATE_PATH);
            Document rq = XmlUtil.parseDocument(StringUtils.replaceValues(template, replaceValues));
            result = poenaService.execute(HttpMethod.POST, null, rq);
        } catch (IOException e) {
            throw new PoenaServiceException("Unable to read template file: " + TEMPLATE_PATH, e);
        } catch (SAXException e) {
            throw new PoenaServiceException("Unable to parse result document, please check template file: " + TEMPLATE_PATH, e);
        } catch (HttpServiceException e) {
            throw new PoenaServiceException(e);
        }

        if (result.isSuccess()) {
            return (String) result.getResult();
        }

        throw new PoenaServiceException("HTTP service error code '" + result.getStatusCode() + "', message: " + result.getStatusMessage());
    }
}

当我尝试调试时,我会看到下一张图片:

enter image description here

结果我得到NullPointerException

我无法弄清楚这种行为。为什么会发生这种情况?

有任何建议吗?

1 个答案:

答案 0 :(得分:2)

它没有用,因为你实际上并没有使用Guice。您需要创建一个注入器并将依赖项绑定到某个东西。类似于此的东西:

public class VelocityParserTest {
    public static void main(String[] args) throws IOException {
        Injector injector = Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                bind(PoenaRequestService.class).asEagerSingleton();
                bind(HttpService.class)
                    .annotatedWith(Names.named("poena_service"))
                    .toInstance(...);
            }
        });

        try {
            PoenaRequestService poenaService = injector.getInstance(PoenaRequestService.class);
            System.out.println(poenaService.sendRequest("kbkCode"));
        } catch (PoenaServiceException e) {
            e.printStackTrace();
        }
    }
}