2013-10-25 2 views
0

Я очень новичок в веб-сервисе.axis2 Ответ с ответа на запрос

У меня есть один веб-сервис, подверженный воздействию, поэтому клиент потребляет его, но из-за важности обслуживания мы хотим, чтобы запрос SOAP журнала и ответ SOAP протекали IN и OUT.

Я использую Axis2-1.6.2 Это то, что я пытался до сих пор, я написал один пользовательский обработчик и класс модуля

import org.apache.axis2.AxisFault; 
import org.apache.axis2.context.MessageContext; 
import org.apache.axis2.engine.Handler; 
import org.apache.axis2.handlers.AbstractHandler; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class LogHandler extends AbstractHandler implements Handler { 
    private static final Log log = LogFactory.getLog(LogHandler.class); 
    private String name; 

    public String getName() { 
     System.out.println("LogHandler.getName()"); 
     return name; 
    } 

    public InvocationResponse invoke(MessageContext msgContext) throws AxisFault { 
     log.info(msgContext.getEnvelope().toString()); 
     System.out.println("LogHandler.invoke()"); 
     return InvocationResponse.CONTINUE;   
    } 

    public void revoke(MessageContext msgContext) { 
     System.out.println("LogHandler.revoke()"); 
     log.info(msgContext.getEnvelope().toString()); 
    } 

    public void setName(String name) { 
     System.out.println("LogHandler.setName()"); 
     this.name = name; 
    } 
} 

Я также написал модуль для выше Handler

public class LoggingModule implements Module { 
    //implemented methods 
} 

Из обработчика выше я могу выполнить входной запрос SOAP и исходящий SOAP-ответ.

Но проблема в том, что я получаю много запросов за раз, поэтому, если я пишу простой запрос и ответ, то при просмотре журналов я не могу определить, чей ответ это.

Журналы в общем написать

Request1 SOAP 
Request2 SOAP 
Response1 SOAP 
Request3 SOAP 
Request4 SOAP 
Response2 SOAP 

invoke(MessageContext msgContext) Этот метод получения вызывается в то время как приходит запрос и ответ выходит. Есть ли что-нибудь, что я могу получить, запросить SOAP, когда время ответа вызвано.

Итак, я хочу какое-то решение, где я могу консолидировать Request SOAP в Response SOAP, так что 1 Log завершен Request-Response.

Если какой-либо орган может предложить какое-то хорошее решение, это будет полезно.

ответ

1

Вы получаете запрос и ответ регистрируются, потому что вы зарегистрировать обработчик в обеих IN/OUT течет ..

Скажет, если вы регистрируете свой обработчик на выходе потока, вы будете иметь возможность выбрать свой соответствующий запрос и ответ. То есть из ответа messgaecontext вы можете получить доступ к контексту сообщения запроса. из этого вы можете прочитать свое сообщение запроса. [1]

Но здесь вы увидите проблему, которая, если ваш запрос не удался, вы не сможете захватить его в своем потоке. Этот журнал может пропустить.

[1] http://vvratha.blogspot.com/2013/05/accessing-request-messagecontext-from.html

+0

Какой способ зарегистрировать обработчик в IN только или только? можете ли вы указать некоторую ссылку. Кроме того, если я зарегистрируюсь в IN-OUT, я не получу запрос в ответ? – Jayesh

+0

Спасибо Ратха. это работает. – Jayesh

+0

Можете ли вы объяснить свое «Но здесь вы увидите проблему, которая, если ваш запрос не удался, вы не сможете его захватить в своем потоке. Этот журнал может пропустить». линий. – Jayesh

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