Я пытаюсь зарегистрировать все исходящие запросы Http в моем веб-приложении, основанном на весне. Есть ли перехватчик для этой цели? Я хочу зарегистрировать все исходящие содержимое и заголовки, прежде чем он покинет приложение. Я использую spring-ws
для отправки запросов SOAP. Поэтому в основном я хочу регистрировать не только запрос SOAP xml (как упоминается здесь How can I make Spring WebServices log all SOAP requests?), но и HTTP-запрос в целом.Spring: протоколирование исходящих HTTP-запросов
ответ
Intercept запрос/ответ с использованием ClientInterceptor
на WebServiceGatewaySupport
:
// soapClient extends WebServiceGatewaySupport
soapClient.setInterceptors(new ClientInterceptor[]{new ClientInterceptor() {
@Override
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
messageContext.getRequest().writeTo(os);
} catch (IOException e) {
throw new WebServiceIOException(e.getMessage(), e);
}
String request = new String(os.toByteArray());
logger.trace("Request Envelope: " + request);
return true;
}
@Override
public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
messageContext.getResponse().writeTo(os);
} catch (IOException e) {
throw new WebServiceIOException(e.getMessage(), e);
}
String response = new String(os.toByteArray());
logger.trace("Response Envelope: " + response);
return true;
}
...
Чтобы получить заголовки, а вам нужен экземпляр TransportOutputStream
. К сожалению, класс является абстрактным, поэтому вам нужен подкласс. Вот как это может выглядеть:
class ByteArrayTransportOutputStream extends TransportOutputStream {
private ByteArrayOutputStream outputStream;
@Override
public void addHeader(String name, String value) throws IOException {
createOutputStream();
String header = name + ": " + value + "\n";
outputStream.write(header.getBytes());
}
public byte[] toByteArray() {
return outputStream.toByteArray();
}
@Override
protected OutputStream createOutputStream() throws IOException {
if (outputStream == null) {
outputStream = new ByteArrayOutputStream();
}
return outputStream;
}
}
Я уже пробовал этот. Он регистрирует только SOAP-запрос xml. Не HTTP-запрос вместе с заголовками http. – nebula
Вы можете передать 'TransportOutputStream' вместо' ByteArrayOutputStream'. Согласно Javadoc 'WebServiceMessage # writeTo': если данный поток является экземпляром {@link * org.springframework.ws.transport.TransportOutputStream}, соответствующие заголовки также будут записаны. – fateddy
Как получить экземпляр «TransportOutputStream» здесь? – nebula
- 1. Spring Integration протоколирование ошибок
- 2. Выключите Tomcat протоколирование с помощью Spring загрузки Применения
- 3. Проблема с ANT вывода, протоколирование Java и SPRING учебник
- 4. SLF4J протоколирование не протоколирование в файл в wildfly
- 5. Mysqld и протоколирование запросов
- 6. Странно AQDefaultDevice протоколирование
- 7. QuickFix/N производительность протоколирование
- 8. протоколирование - изменение реализации?
- 9. Cassandra Java протоколирование драйвер
- 10. phpMyAdmin - протоколирование клиентских запросов?
- 11. log4net и noSQL протоколирование
- 12. py.test: протоколирование числа сбоев
- 13. PHP протоколирование 403 ошибок
- 14. Параллельный MATLAB и протоколирование
- 15. Mute Stanford coreNLP протоколирование
- 16. протоколирование (запись) событий программы
- 17. Python Параллельное протоколирование прочитано
- 18. Глобальное протоколирование Python
- 19. Weblogic 10.3 протоколирование реализации
- 20. Отключить протоколирование 404 Ошибки
- 21. Код разработки и протоколирование
- 22. Метод доступа пользователей протоколирование
- 23. ASP.NET Core 1.0 протоколирование
- 24. PySpark протоколирование от исполнителя
- 25. Включить протоколирование метро/трубки
- 26. Как игнорировать протоколирование
- 27. Python, протоколирование и дизайн
- 28. WinRT протоколирование в файл
- 29. YII протоколирование для отладки
- 30. Global.asax и протоколирование
Считаете ли вы использование aop? – SMA