У меня есть конечная точка spring ws как часть проекта Spring Integration, и я хотел бы получить доступ к заголовку Soap. Когда я добавляю SoapHeader к параметрам методы я получаю следующее исключение:Добавить SoapHeader в Spring WS Endpoint
[10/05/16 05: 00: 05: 005] PDT-локальные стартстопного-1 DEBUG springframework.integration.util.MessagingMethodInvokerHelper .doWith(): Метод [public com.bstonetech.ptms.integration.model.ws.external.contract.GetContractResponse com.bstonetech.ptms.integration.service.ws.GetContractEndpoint.getContract (com.bstonetech.ptms. integration.model.ws.external.contract.GetContractRequest, org.springframework.ws.context.MessageContext) throws java.lang.Exception] не подходит для обработки сообщений Найдено несколько типов кандидатов: [@ org.springframework.ws.server.endpoint.annotation.RequestPayload com.bstonetech.ptms.integration.model.ws.external.contract.GetContractRequest] и [org.springframework.ws.context.MessageContext]. [10/05/16 05: 00: 05: 005 PDT] локальный-стартстопный-1 WARN web.context.support.XmlWebApplicationContext.refresh(): Исключение , возникшие в ходе инициализации контекста - отмена попытки обновления
ява .lang.IllegalArgumentException: целевой объект типа [класс com.bstonetech.ptms.integration.service.ws.GetContractEndpoint] не имеет подходящих методов обработки сообщений.
Такая же ошибка возникает при использовании MessageContext messageContext.
У меня явно нет чего-то. Любая помощь будет оценена по достоинству.
интеграции выглядит следующим образом:
<oxm:jaxb2-marshaller id="contractMarshaller" context-path="com.bstonetech.ptms.integration.model.ws.external.contract"/>
<ws:inbound-gateway id="getContractWs" request-channel="inboundGetContractChannel" mapped-request-headers="fileId" mapped-reply-headers="fileId"
marshaller="contractMarshaller" unmarshaller="contractMarshaller"/>
<int:service-activator id="contractEndpoint" input-channel="inboundGetContractChannel" ref="getContractEndpoint"/>
Конечная точка выглядит следующим образом:
@Endpoint
public class GetContractEndpoint {
private static final String NAMESPACE_URI = "http://bstonetech.com/contract";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "GetContractRequest")
@ResponsePayload
public GetContractResponse getContract(@RequestPayload GetContractRequest request, SoapHeader soapHeader) throws Exception {
.....
}
Спасибо, я понимаю. Теперь я использую PayloadRootQNameEndpointMapping, чтобы выполнить сопоставление шлюза и просто реализовать конечную точку как POJO. – alan
Вы все еще можете сделать это и получить прибыль от обмена сообщениями вниз по течению. Просто переместите всю конфигурацию «@Endpoint» на уровень @MessagingGateway –
Следуя этому, я внедрил EnpointInterceptor для перехвата каждого входящего вызова веб-службы. Я пишу в базу данных в каждом конкретном случае и успешно выполняю команду. Я хотел бы иметь возможность передать созданный идентификатор строки базы данных в POJO. Я вижу, что MessageContext имеет свойства, которые я могу установить. Возможно ли получить MessageContext в POJO или сопоставить свойства заголовкам перед выполнением POJO? – alan