2016-02-15 2 views
1

У меня есть веб-служба, которая содержит метод getEmployeeList, и мне нужно регистрировать запрос и ответ в базе данных, например;Jax-ws: запрос и ответ на запрос в базе данных

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

Есть ли способ сопоставить запрос и ответ в моем обработчике?

ответ

1

Вы можете создать идентификатор, когда вы обработки входящего сообщения и сохранять в 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, который не хранится в живых до тех пор, конец процесса ответа, поэтому, даже если различные запросы выполняются одновременно, каждый контекст будет другим.

+0

Вы правы. Интерфейс MessageContext расширяет карту , Большое вам спасибо. – xunil

 Смежные вопросы

  • Нет связанных вопросов^_^