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