Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将HttpServletResponse转换为javax.ws.rs.core.Response_Java_Spring_Servlets_Model View Controller_Cxf - Fatal编程技术网

如何将HttpServletResponse转换为javax.ws.rs.core.Response

如何将HttpServletResponse转换为javax.ws.rs.core.Response,java,spring,servlets,model-view-controller,cxf,Java,Spring,Servlets,Model View Controller,Cxf,我正在开发一个日志框架。日志框架是使用cxf和javax.ws.rs.core.Response编写的,我使用SpringMVC编写了一个拦截器。 我正在尝试将HttpServletResponse发送到javax.ws.rs.core.Response,因为HttpServletResponse没有getStatus()方法,如何将状态设置为javax.ws.rs.core.Response package com.logging; import javax.servlet.http.Htt

我正在开发一个日志框架。日志框架是使用cxf和javax.ws.rs.core.Response编写的,我使用SpringMVC编写了一个拦截器。 我正在尝试将HttpServletResponse发送到javax.ws.rs.core.Response,因为HttpServletResponse没有getStatus()方法,如何将状态设置为javax.ws.rs.core.Response

package com.logging;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.joda.time.LocalDateTime;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

@Component
public class RequestLoggingInterceptor extends HandlerInterceptorAdapter {

 private static final Log logger = 
 LogFactory.getLog(RequestConversationPersister.class); private static final 
  String HEADER_DEVICEID = "deviceid";
    private static final String HEADER_DEVICEID_NOTPROVIDED_VALUE = 
  "DEVICEID_NOTPROVIDED";
    private static final String HEADER_POLICYNUMBER = "policynumber";
    private static final String HEADER_POLICYNUMBER_NOTPROVIDED_VALUE = 
  "POLICYNUMBER_NOTPROVIDED";
    private static final String HEADER_USERID = "userid";
    private static final String HEADER_USERID_NOTPROVIDED_VALUE = 
 "USERID_NOTPROVIDED";
    private static final String INSERT_STATEMENT = "Insert Into LOGNMSWS 
(CONVERSATION_ID, DEVICE_ID, REQUEST_URL, RESPONSE_STATUS, DATETIME, 
POLICYNUMBER, USERID) Values (?, ?, ?, ?, ?, ?, ?)";
    protected static ThreadLocal<RequestGendroidServiceConversation> 
conversation = new ThreadLocal<RequestGendroidServiceConversation>();

    // A spring abstraction of for JDBC, it handles exceptions and opening 
    //and
    // closing connections
   RequestConversationContainer container;

    JdbcTemplate jdbcTemplate;

    public RequestLoggingInterceptor( DataSource dataSource, 
   RequestConversationContainer container) {
       if ((dataSource == null) || (container == null)) {
              throw new IllegalArgumentException("Neither dataSource or 
 container may be null");
          }
     jdbcTemplate = new JdbcTemplate(dataSource);
     this.container =  container;
    }
    public RequestLoggingInterceptor() {

    }



 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse 
 response, Object handler) throws Exception {
     String deviceid = request.getHeader(HEADER_DEVICEID)  != null ? 
 request.getHeader(HEADER_DEVICEID)  : HEADER_DEVICEID_NOTPROVIDED_VALUE;
      String policynumber =  request.getHeader(HEADER_POLICYNUMBER)  != null 
 ? request.getHeader(HEADER_POLICYNUMBER) : 
 HEADER_POLICYNUMBER_NOTPROVIDED_VALUE;
      String userid = request.getHeader(HEADER_USERID)  != null ? 
 request.getHeader(HEADER_USERID) : HEADER_USERID_NOTPROVIDED_VALUE;

      int status = response.SC_OK;
  System.out.println("---------> status"+ status);
   RequestGendroidServiceConversation gsc = new 
  RequestGendroidServiceConversation(deviceid, 
  request.getRequestURL().toString(),policynumber,userid);
   logger.debug("Handling GendroidConversation with id: " + 
 gsc.getConversationID());
   // We don't want to interrupt or fail the response being handled by the
   // executing thread so we'll catch and log any exceptions.
   try {
       container.add(gsc);
       conversation.set(gsc);
   } catch (Exception e) {
       logger.error(e);
   }
    return true;
}

 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse 
 response, Object handler, ModelAndView mav) throws Exception {
    RequestGendroidServiceConversation gsc = conversation.get();
    if (gsc != null) {
      try {

            gsc.setResponseTime(new LocalDateTime());
            gsc.setResponseStatus(HttpServletResponse.SC_OK); //-----------> 
              //here I hard coded with SC_OK but I need to send status
         } catch (Exception e) {
            logger.error("Could not retrieve Gendroid service conversation 
       due to exception :" + e.getMessage());
        } finally {
            conversation.remove();
        }
     }

  }


}
package.com.logging;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.sql.DataSource;
导入org.apache.commons.logging.Log;
导入org.apache.commons.logging.LogFactory;
导入org.joda.time.LocalDateTime;
导入org.springframework.jdbc.core.jdbc模板;
导入org.springframework.stereotype.Component;
导入org.springframework.web.servlet.ModelAndView;
导入org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@组成部分
公共类RequestLoggingInterceptor扩展了HandlerInterceptorAdapter{
专用静态最终日志记录器=
LogFactory.getLog(RequestConversationPersister.class);私有静态final
字符串标题_DEVICEID=“DEVICEID”;
私有静态最终字符串头\u设备ID\u未提供\u值=
“未提供设备ID”;
私有静态最终字符串头\u POLICYNUMBER=“POLICYNUMBER”;
私有静态最终字符串头\u策略编号\u未提供\u值=
“未提供保单编号”;
私有静态最终字符串头\u USERID=“USERID”;
私有静态最终字符串头\u用户标识\u未提供\u值=
“未提供用户标识”;
私有静态最终字符串INSERT_STATEMENT=“INSERT Into LOGNMSWS
(会话ID、设备ID、请求URL、响应状态、日期时间、,
POLICYNUMBER,USERID)值(?,,,,,,,,,,?)”;
受保护的静态线程本地
conversation=newthreadlocal();
//作为JDBC的spring抽象,它处理异常和打开
//及
//关闭连接
请求会话容器;
jdbc模板jdbc模板;
public RequestLoggingInterceptor(数据源数据源,
RequestConversationContainer(容器){
if((数据源==null)| |(容器==null)){
抛出新的IllegalArgumentException(“数据源或
容器可能为空“);
}
jdbcTemplate=新的jdbcTemplate(数据源);
this.container=容器;
}
公共RequestLoggingInterceptor(){
}
@凌驾
公共布尔预处理(HttpServletRequest、HttpServletResponse
响应,对象处理程序)引发异常{
字符串deviceid=request.getHeader(HEADER\u deviceid)!=null?
getHeader(HEADER\u DEVICEID):HEADER\u DEVICEID\u未提供\u值;
字符串policynumber=request.getHeader(HEADER\u policynumber)!=null
?请求。getHeader(HEADER_POLICYNUMBER):
标题\u保单编号\u未提供\u值;
字符串userid=request.getHeader(HEADER\u userid)!=null?
getHeader(HEADER\u USERID):HEADER\u USERID\u NOTPROVIDED\u值;
int status=response.SC_OK;
System.out.println(“----------->状态”+状态);
RequestGendroidServiceConversation gsc=新建
RequestGendroidServiceConversation(设备ID,
request.getRequestURL().toString(),policynumber,userid);
debug(“处理id为:”+
gsc.getConversationID());
//我们不希望中断或使服务器处理的响应失败
//执行线程,以便捕获并记录任何异常。
试一试{
容器。添加(gsc);
会话集(gsc);
}捕获(例外e){
错误(e);
}
返回true;
}
@凌驾
public void postHandle(HttpServletRequest请求,HttpServletResponse
响应、对象处理程序、ModelAndView(mav)引发异常{
RequestGendroidServiceConversation gsc=conversation.get();
如果(gsc!=null){
试一试{
setResponseTime(新的LocalDateTime());
gsc.setResponseStatus(HttpServletResponse.SC_OK);/----------->
//在这里,我硬编码与SC_确定,但我需要发送状态
}捕获(例外e){
logger.error(“无法检索Gendroid服务对话
由于异常:“+e.getMessage());
}最后{
会话。删除();
}
}
}
}

这是肯定的:也许您使用的是过时的(3.0之前的)servlet API?是的,我们使用的是servlet API 2.5,我们无法升级到3.0,因为我们所有的应用程序都使用2.5,但是有没有其他解决方案可以让它设置状态?