0

I tried for a day to configure a connection to a postgresql database with spring framework. I'm beginner on this techno and i supposed i missed something in my config ...

Here are my code :

ApplicationContext-dao-psql xml file :

<bean id="PsqlConfiguration" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.user}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="PhotoDao" class="path.to.class.PhotoDaoImpl">
    <property name="psqlConfiguration" ref="PsqlConfiguration" />
</bean>

the properties (url, username, passwd) are stored in another properties file

applicationContext-service xml file :

<jaxrs:server id="PhotoService" address="/">
    <jaxrs:serviceBeans>
        <ref bean="PhotoServiceImpl" />
    </jaxrs:serviceBeans>
    <jaxrs:extensionMappings>
        <entry key="json" value="application/json" />
    </jaxrs:extensionMappings>
</jaxrs:server>

<bean id="PhotoServiceImpl" class="path.to.class.PhotoServiceImpl">
    <property name="PhotoDao" ref="PhotoDao" />
</bean>

PhotoServiceImpl :

   public class PhotoServiceImpl implements PhotoService {
        public Response getFile(String id){
            byte[] img = null;
            PhotoDaoImpl photo = new PhotoDaoImpl();
            img = photo.getPhoto(id);
            return Response.ok(img).header("Content-disposition","attachment; filename=photo.jpg").build(); 
            }
        }

PhotoDaoImpl :

public class PhotoDaoImpl implements PhotoDao {

    public DataSource psqlConfiguration;

    public DataSource getPsqlConfiguration() {
        return psqlConfiguration;
    }

    public void setPsqlConfiguration(DataSource psqlConfiguration) {
        this.psqlConfiguration = psqlConfiguration;
    }
    Connection conn;

    public byte[] getPhoto(String id){
        byte[] imgData = null;
        try {
        conn = psqlConfiguration.getConnection(); // Here is my Null error
        ...
    }
}

My error is referenced in the line with getConnection().

Stacktrace

juil. 27, 2017 2:37:43 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
AVERTISSEMENT: Application {http://path/to/class/}PhotoServiceImpl has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault
    at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:170)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:136)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:204)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at path.to.class.PhotoDaoImpl.getPhoto(PhotoDaoImpl.java:38)
    at path.to.class.PhotoServiceImpl.getFile(PhotoServiceImpl.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:188)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:104)
    ... 36 more

I supposed my problem is due to psqlConfiguration which is empty, but i don't understand why ..

Thank you very much for helping me !

Regards

Edit :

i fixed my problem with adding annotations and with creating (and not instancing) my PhotoDao var:

@Component
public class PhotoServiceImpl implements PhotoService {
    public PhotoDao getPhotoDao() {
        return PhotoDao;
    }
    public void setPhotoDao(PhotoDao photoDao) {
        this.PhotoDao = photoDao;
    }

    @Autowired
    private PhotoDao PhotoDao;
    public Response getFile(String id){
        byte[] img = null;
        img = PhotoDao.getPhoto(id);
        return Response.ok(img).header("Content-disposition","attachment; filename=photo.jpg").build(); 
   }    
}
agentn
  • 33
  • 1
  • 5
  • Your datasource is set through setPsqlConfiguration. Where in your application do you call this method? You have to inject the datasource somewhere. Either in the class which is calling your setter, or directly in your PhotoDaoImpl –  Jul 27 '17 at 12:54
  • i didnt use it, but is it not the role of spring to use this getter/setter to link the xml properties and the call of the var in the code ? – agentn Jul 27 '17 at 13:17

0 Answers0