catch32
catch32

Reputation: 18582

Guice doesn't initialize property

I'm newly with Guice.
I want to use Guice for initializing object without writing new directly.

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

When I tried to debug this I see next picture:

enter image description here

As e result I got NullPointerException.

I couldn't figure out this behavior. Why does this exactly happen?

Any suggestions?

Upvotes: 0

Views: 1655

Answers (1)

Nate
Nate

Reputation: 2205

It's not working because you're not actually using Guice. You need to create an injector and bind your dependencies to something. Something akin to this:

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

Upvotes: 2

Related Questions