【问题标题】:Create Web Service (SOAP or REST) using Struts2 and hibernate使用 Struts2 和 hibernate 创建 Web 服务(SOAP 或 REST)
【发布时间】:2016-06-07 23:18:34
【问题描述】:

我在使用 struts 2 和 hibernate 调用 Web 服务时遇到问题...

HTTP 状态 500 - 无法实例化 Action,actions.events.rest.EventController,为命名空间 '/' 中的 'event' 定义 使用名称 'actions.events.rest.EventController' 创建 bean 时出错:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [actions.events.rest.EventController]:构造函数抛出异常;嵌套异常是 java.lang.NullPointerException

这是我的来源:

事件控制器:

public class EventController extends BaseAction implements ModelDriven<Object> {
private static final long serialVersionUID = 1L;
private String id;
private Object model; 

private static Map<String, Event> map;
{ 
    List<Event> events = services.getEvents();
    for(Event event : events){
        map.put(event.getId() + "", event);
    } 
}

public HttpHeaders index() {
    model = map;
    return new DefaultHttpHeaders("index").disableCaching();
}

public String add(){ 
    services.createEvent("Event1");
    return "SUCCESS";
}

public String getId() {
    return id;
}
public void setId(String id) {
    Integer iid = Integer.parseInt(id);
    model = services.getEventById(iid);
    this.id = id;
}

public Object getModel() {
    return model;
} 

基本动作:

public class BaseAction extends ActionSupport {
// So that spring can inject the business singleton
protected Services services;

public void setServices(Services value) {
    services=value;
}

// For redirect results
protected String redirectUrl;

public String getRedirectUrl() {
    return redirectUrl;
}

public String redirect(String to) {
    redirectUrl = to;
    return "redirect";
}

当我调试时,List&lt;Event&gt; events = services.getEvents(); 中的 EventController 出现错误。会是什么?

【问题讨论】:

    标签: java spring hibernate rest struts2


    【解决方案1】:
    • 异常是由
      您从 静态初始化块中引用注入的 bean services 引起的:

      { 
          List<Event> events = services.getEvents();
          for(Event event : events){
              map.put(event.getId() + "", event);
          } 
      }
      

      完全删除它,在prepare() 方法或@PostConstruct 方法中执行此类操作,或其他任何地方,但不理会静态块。

    也就是说,您正在遵循一些不良做法:

    • 您返回的是 "SUCCESS",而它应该是 "success"SUCCESS(即 "success"

    • 你将逻辑放入 setter 中,最好不要

    • 我还建议放弃 ModelDriven,完全放弃 Spring 和 use CDI,但最后一点是我的拙见。顺便说一句,确保take a look at what I'm talking about

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      相关资源
      最近更新 更多