java - Jax-ws:在数据库中记录请求和响应

标签 java jax-ws

我有一个包含 getEmployeeList 方法的 Web 服务,我需要在数据库中记录请求和响应,例如:

***Column**  **Id   Request       Response       ResponseTime*** 
               1    Request1      Response1      600ms
               2    Request2      Response2      400ms

我的员工服务等级;

@WebService
@HandlerChain(file="employeehandler-chain.xml")
public interface EmployeeWS {

@WebMethod
List<Employee> getEmployeeList(
        @WebParam(name = " EmployeeReq")  EmployeeReq  employeeReq);

我的自定义处理程序类;

public class EmployeeHandler implements SOAPHandler<SOAPMessageContext> {

 @Override
 public boolean handleMessage(SOAPMessageContext context) {


    Boolean outBound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

    try {
        SOAPMessage soapMsg = context.getMessage();

有没有办法将我的处理程序中的请求和响应关联起来?

最佳答案

您可以在处理入站消息时创建一个 ID,并将其保存到 SOAPMessageContext 中,并在处理响应时获取它:

Boolean outBound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

if (!outbound) {
    Long messageId = createId();
    context.put("messageId", messageId);
    saveRequestToDatabase(context.getMessage(), messageId);
} else {
    saveResponseToDatabase(context.getMessage(), context.get("messageId"));
}

每个请求都会创建一个新的 SOAPMessageContext,它会一直保持 Activity 状态,直到响应过程结束,因此即使有多个请求同时执行,每个上下文也会有所不同。

关于java - Jax-ws:在数据库中记录请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35409802/

相关文章:

java - .class 语法 MainActivity.class.getSimpleName();

java - 如何创建一个类来处理多维数组列表

java - 如何自动设置随每个请求而变化的 JAX-WS HTTP header

java - 客户端回调方法的分布式Java最佳方法

soap - 如何使用Java JAX-WS添加SOAP header

java - Spring + hibernate +Maven : jCannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'jdbc:mysql//localhost:3306/test'

java - Android:数组适配器不显示ListView

java - Retrofit Api 接口(interface)中的属性值必须是常量

java - 将 JAX-WS 版本 2.2.1 升级到 2.2.8 后的 NPE

java - 如何在 CXF Web 服务中使用根上下文作为 wsdl 端点