Я использую веб-сервис JAX-WS, основанный на Apache CXF 2.3.1, на сервере JBoss6.
Мой сервис предлагает функцию getWeight
.Эта функция должна возвращать значения в разных единицах (килограммах, фунтах) в зависимости от дополнительной информации в заголовке SOAP.Для этого я добавил свой собственный перехватчик:
public class MySoapHeaderInterceptor extends AbstractSoapInterceptor
{
public MySoapHeaderInterceptor()
{
super(Phase.USER_PROTOCOL);
}
...
}
Перехват работает нормально, и я могу проанализировать дополнительный элемент из заголовка SOAP и установить переменную на основе этого элемента:
boolean poundsRequested = true;
Теперь моя проблема возникает.Я не знаю, как переслать переменную poundsRequested
в мою фактическую реализацию WebService MyServiceImpl
.Этот класс вызывает другой класс ValueReader
, где мне, наконец, нужна информация из заголовка SOAP.
Я уже пытался настроить глобальную статическую переменную ValueReader.poundsRequested
.Но такое решение не является потокобезопасным.Может случиться так, что вызовы двух клиентов мешают друг другу и могут перезаписать друг друга для установки переменной.
Подводя итог : мне в основном нужна возможность переслать переменную из перехватчика Apache CXFк фактической реализации веб-сервиса.Более того, значение этой переменной должно быть уникальным для каждого запроса.