В 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 в этом свойстве выключает определение исходящей операции.
Дополнительная информация: