2017-02-13 14 views
0

Я получил веб-службы CXF OSGi (на примере демо в ServiceMix: https://github.com/apache/servicemix/tree/master/examples/cxf/cxf-jaxws-blueprint)Получить запрос WS в веб-службе CXF

Веб-служба работает отлично, и я называю все имеющиеся реализованные методы обслуживания.

Мой вопрос в том, как я могу получить запрос внутри метода WS и проанализировать его в формате XML-строки.

Я обнаружил, что это возможно внутри перехватчиков для регистрации, но я также хочу, чтобы WS-Request внутри моих методов.

+0

Если вы хотите простой xml, то зачем использовать jax ws? Для чего нужен xml для? –

+0

Я хочу фактическая полезная нагрузка запроса, как показано в моих журналах servicemix. На вопрос «Зачем мне это нужно». Я храню полезную нагрузку в своей базе данных для дальнейшей обработки в будущем. – Stephan

+0

Я вижу здесь (http://stackoverflow.com/questions/11038313/how-to-get-incoming-outgoing-soap-xml-in-a-simple-way-using-apache-cxf) некоторые способы получить сообщение от перехватчика, как упомянуто выше, но мне нужна эта полезная нагрузка во мне WS-методах. – Stephan

ответ

1

Для хранения запроса в базе данных я предлагаю расширить new CXF message logging.

Вы можете реализовать пользовательский LogEventSender, который записывается в базу данных.

+0

Благодарим вас за предложение, но это не отвечает на вопрос. Как или если я могу получить в своем веб-методе полезную нагрузку запроса. – Stephan

0

У меня было аналогичное требование, когда мне нужно сохранить данные в DB после вызова метода. Я использовал ThreadLocal с LoggingInInterceptor и LoggingOutInterceptor. Например, в LoggingInInterceptor я использовал для установки сообщения в ThreadContext, а в методе webservice получаю сообщение с использованием LoggingContext.getMessage(), а в LoggingOutInterceptor я использовал для удаления сообщения (ПРИМЕЧАНИЕ. Необходимо быть осторожным здесь, вам нужно явно удалить сообщение из контекста потока else вы будете в конечном итоге с утечкой памяти, а также упаковывают на стороне клиента кода перехватчиков получить обратный.

public class LoggingContext { 

    private static ThreadLocal<String> message; 

    public static Optional<String> getMessage() { 
     return Optional.ofNullable(message.get()); 
    } 

    public static void setMessage(final String message) { 
     LoggingContext.message = new ThreadLocal<>(); 
     LoggingContext.message.set(message); 
    } 

} 
0

не ответ на этот вопрос, но я достиг делать свою задачу с помощью JAXB в конце концов, и сделать некоторые манипуляции там

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

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