Проверка поведения действия SOAP, заданного у исходящих сообщений

В WebSphere Application Server 8 изменилось поведение, связанное с определением параметра действия SOAP у исходящих сообщений для клиентов диспетчера JAX-WS. До версии 8, если действие SOAP не передано приложением-клиентом диспетчера, среда выполнения JAX-WS не отправляет правильное действие SOAP в исходящем сообщении. Вместо этого, она указывает анонимную операцию в качестве действия. В версии 8, если действие SOAP не передано приложением-клиентом, среда выполнения JAX-WS определяет вызываемую операцию по содержимому исходящего сообщения и задает соответствующее значение для действия SOAP.

Это правило помечает вызовы для создания клиента диспетчера, когда:

Для WebSphere Application Server traditional и Liberty рекомендуется, чтобы приложение-клиент передавало действие SOAP в свойствах SOAPACTION_USE_PROPERTY и SOAPACTION_URI_PROPERTY интерфейса javax.xml.ws.BindingProvider JAX-WS. Переданное действие SOAP используется, и анализ исходящего сообщения не выполняется вне зависимости от значения свойства DISPATCH_CLIENT_OUTBOUND_RESOLUTION.

В следующем примере показан рекомендуемый код, в котором действие SOAP задано в контексте запроса. Если свойство SOAPACTION_URI_PROPERTY нет задано или если свойство SOAPACTION_USE_PROPERTY равно false, это правило помечает вызов метода createDispatch().

Пример:

//Создать экземпляр диспетчера
Dispatch<SOAPMessage> dispatch =
service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);

// Использовать диспетчер в качестве объекта BindingProvider
BindingProvider bp = (BindingProvider) dispatch;

// Настроить объект RequestContext для отправки заголовка HTTP SOAPAction
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello");

Поскольку такой анализ может быть дорогостоящей операцией, в WebSphere Application Server traditional предусмотрено свойство на уровне системы (для полного выключения анализа) и в контексте сообщения-запроса JAX-WS (для отключения анализа у отдельных сообщений). Если анализ выключен, в качестве действия SOAP в исходящем сообщении будет по-прежнему задаваться анонимная операция. Выключающее свойство определено как константа org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION со строковым значением jaxws.dispatch.outbound.operation.resolution.enable. Если свойство не задано, то считается, что оно равно строке true, включающей определение исходящей операции. Значение false в этом свойстве выключает определение исходящей операции.

Дополнительная информация: