使用rest(jersey)

时间:2016-08-15 17:15:02

标签: java spring web-services jersey

我正在尝试使用Spring jdbc和Jersey.My代码

从mysql数据库中检索数据

Dao是这一个getUsers()。如果我想让所有用户都能正常工作,我可以在jsp上显示它们。

public List<User> getUsers() throws Exception {
    logger.info("Query DB for users");
     return jdbc.query("Select id,name,lname,username,"
        + "password,postcode,authority,email,"
        + "address,dateofbirth,city,country,"
        + "gender "
        + " from Users", new RowMapper<User>() {

        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            logger.debug(" query the user");
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setLname(rs.getString("lname"));
            user.setUsername(rs.getString("username"));
            user.setPassword(rs.getString("password"));
            user.setPostcode(rs.getString("postcode"));         
            user.setAuthority(rs.getString("authority"));
            user.setEmail(rs.getString("email"));
            user.setAddress(rs.getString("address"));
            user.setDateofbirth(rs.getString("dateofbirth"));
            user.setCity(rs.getString("city"));
            user.setCountry(rs.getString("country"));
            user.setGender(rs.getString("gender"));             
            return user;
        }

    });
}

这是资源类

   @Path("/user")
   public class UserResource {
      UserServiceWS userServicews = new UserServiceWS();

@GET
@Produces(MediaType.APPLICATION_XML)
public List<User> getUserData() throws Exception {
    return userServicews.getUsers();
}
 }

所以这是我的UserService类

public class UserServiceWS {



@Autowired
UserDao userDao ;

public UserServiceWS() {
    try {
        getUsers();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public List<User> getUsers() throws Exception {
    return new ArrayList<User>(userDao.getUsers());
}
 }

所以问题是我在userDao.getUsers()上得到了nul指针异常。 我错过了什么? 这是错误代码

  
    

HTTP状态500 - java.lang.NullPointerException

  
     

输入例外报告

     

message java.lang.NullPointerException

     

description服务器遇到阻止它的内部错误   完成此请求。

     

例外

     

javax.servlet.ServletException:java.lang.NullPointerException     org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:397)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

根本原因

     

显示java.lang.NullPointerException     com.org.projectClient.wsService.UserServiceWS.getUsers(UserServiceWS.java:29)     com.org.projectClient.resource.UserResource.getUserData(UserResource.java:23)     sun.reflect.NativeMethodAccessorImpl.invoke0(原生方法)     sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)     sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)     java.lang.reflect.Method.invoke(未知来源)     org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory $ 1.invoke(ResourceMethodInvocationHandlerFactory.java:81)     org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher $ 1.run(AbstractJavaResourceMethodDispatcher.java:151)     org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:172)     org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:195)     org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)     org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:384)     org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:342)     org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101)     org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:271)     org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:271)     org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)     org.glassfish.jersey.internal.Errors.process(Errors.java:315)     org.glassfish.jersey.internal.Errors.process(Errors.java:297)     org.glassfish.jersey.internal.Errors.process(Errors.java:267)     org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)     org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)     org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)     org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

注意Apache中提供了根本原因的完整堆栈跟踪   Tomcat / 7.0.68日志。 Apache Tomcat / 7.0.68

用户类模型

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.validator.constraints.NotEmpty;
 import org.springframework.format.annotation.DateTimeFormat;

   @XmlRootElement
   public class User {

private int id;
@NotEmpty
@Size(max = 250)
private String username;
@NotEmpty
@Size(max = 250)
private String password;

       ........... 

如果我创建一个Map并在那里添加数据并检索我没有问题,Web服务正常工作没有问题。但如果我查询数据库,那么我有nullpointer。我错过了什么? 谢谢

添加为11thdimension后写道 @Autowired to

@Autowired

  private UserServiceWS userServicews;

 @Component 
  public class UserServiceWS {


    @Autowired  UserDao userDao ;

然后我得到了

  

HTTP状态500 - MultiException有3个例外。他们是:

     

输入例外报告

     

消息MultiException有3个例外。他们是:

     

description服务器遇到阻止它的内部错误   完成此请求。

     

例外

     

javax.servlet.ServletException:MultiException有3个例外。   他们是:   1. org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型的限定bean   找到[com.org.projectClient.wsService.UserServiceWS]   依赖:预计至少有1个bean有资格成为autowire   这种依赖的候选人。依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}   2. java.lang.IllegalArgumentException:尝试解析com.org.projectClient.resource.UserResource的依赖项时   发现错误   3. java.lang.IllegalStateException:无法执行操作:在com.org.projectClient.resource.UserResource上解析

     

org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:397)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

根本原因

     

MultiException有3个例外。他们是:   1. org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型的限定bean   找到[com.org.projectClient.wsService.UserServiceWS]   依赖:预计至少有1个bean有资格成为autowire   这种依赖的候选人。依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}   2. java.lang.IllegalArgumentException:尝试解析com.org.projectClient.resource.UserResource的依赖项时   发现错误   3. java.lang.IllegalStateException:无法执行操作:在com.org.projectClient.resource.UserResource上解析

     

org.jvnet.hk2.internal.Collector.throwIfErrors(Collector.java:88)     org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:252)     org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360)     org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)     org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:160)     org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2270)     org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:687)     org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:652)     org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169)     org.glassfish.jersey.server.model.MethodHandler $ ClassBasedMethodHandler.getInstance(MethodHandler.java:185)     org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)     org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:94)     org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:63)     org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)     org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:263)     org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:271)     org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)     org.glassfish.jersey.internal.Errors.process(Errors.java:315)     org.glassfish.jersey.internal.Errors.process(Errors.java:297)     org.glassfish.jersey.internal.Errors.process(Errors.java:267)     org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)     org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)     org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)     org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

根本原因

     

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   合格的bean类型   找到[com.org.projectClient.wsService.UserServiceWS]   依赖:预计至少有1个bean有资格成为autowire   这种依赖的候选人。依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}     org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)     org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)     org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)     org.glassfish.jersey.server.spring.AutowiredInjectResolver.getBeanFromSpringContext(AutowiredInjectResolver.java:101)     org.glassfish.jersey.server.spring.AutowiredInjectResolver.resolve(AutowiredInjectResolver.java:93)     org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:214)     org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:237)     org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360)     org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)     org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:160)     org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2270)     org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:687)     org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:652)     org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169)     org.glassfish.jersey.server.model.MethodHandler $ ClassBasedMethodHandler.getInstance(MethodHandler.java:185)     org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)     org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)     org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:94)     org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:63)     org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)     org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:263)     org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:271)     org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)     org.glassfish.jersey.internal.Errors.process(Errors.java:315)     org.glassfish.jersey.internal.Errors.process(Errors.java:297)     org.glassfish.jersey.internal.Errors.process(Errors.java:267)     org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)     org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)     org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)     org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)     org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

注意Apache中提供了根本原因的完整堆栈跟踪   Tomcat / 7.0.68日志。 Apache Tomcat / 7.0.68   这是我的xml

<!-- DispatcherServlet Context: defines this servlet's request-processing 
        infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
        up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
        in the /WEB-INF/views directory -->
    <beans:bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <context:component-scan base-package="com.org.projectClient" />


    <jee:jndi-lookup jndi-name="jdbc/testingdbs" id="dataSource"
        expected-type="javax.sql.DataSource">
    </jee:jndi-lookup>

    <!-- <beans:bean id="messages" class="org.springframework.context.support.ResourceBundleMessageSource"> 
        <beans:property name="basename" value="com.spring.project.demo.messages.messages.properties" 
        /> </beans:bean> -->

.......等等

1 个答案:

答案 0 :(得分:1)

你如何连接数据库?我认为你有问题。

您必须修复数据库连接。

那里出了点问题,你无法检索你的数据。 将数据发送到jsp并且没有数据发送到您的服务是不正常的。

您使用的是Jndi还是其他。创建一个DaoManager来处理您的连接。

最坏的情况是使用密码用户名驱动程序详细信息等创建一个简单的打开/关闭数据库连接。

仅测试您的连接。

创建之后尝试一下,如果这样可行,那么您的服务没有数据库连接。

对于DAOManager,请查看DAOManager

了解简单连接Simple Database Connection

或在这里

Simple Database Connection 2

小心。