2016-12-06 2 views
2

Я пытаюсь установить свойство setendpointmapping объектного UriEndpointmapping с HashMap со значениями следующих параметров:UriEndpointmapping работы с атрибутом setendpointmapping - Spring Integration WS

UriEndpointMapping uriEndpointMapping = new UriEndpointMapping(); 
Map<String,Object> endpointMap = new HashMap<>(); 
endpointMap.put("/miservicio/cliente", gateway); 
endpointMap.put("/miservicio/cliente.wsdl", wsdlDefinition()); 
uriEndpointMapping.setEndpointMap(endpointMap); 

Где: Шлюз является боб INT-WS типа: въездного -gateway и wsdlDefinition способ вернуть DefaultWsdl11Definition

Итак, когда я вызываю из браузерной локального хоста: 8080/miservicio/cliente.wsdl, я не получаю ответа. Итак, как я должен работать?

ответ

1

Вы поняли UriEndpointMapping логика немного:

* Implementation of the {@code EndpointMapping} interface to map from the full request URI or request URI path to 
* endpoint beans. 

Логика определения WSDL является немного по-другому, и это делается как часть логики в MessageDispatcherServlet запуска:

private void initWsdlDefinitions(ApplicationContext context) { 
    wsdlDefinitions = BeanFactoryUtils 
      .beansOfTypeIncludingAncestors(context, WsdlDefinition.class, true, false); 

Отбор WSDL логика оттуда поступает следующим образом:

protected WsdlDefinition getWsdlDefinition(HttpServletRequest request) { 
    if (HttpTransportConstants.METHOD_GET.equals(request.getMethod()) && 
      request.getRequestURI().endsWith(WSDL_SUFFIX_NAME)) { 
     String fileName = WebUtils.extractFilenameFromUrlPath(request.getRequestURI()); 
     return wsdlDefinitions.get(fileName); 
    } 
    else { 
     return null; 
    } 
} 

А давайте возьмем некоторый образец из документации Spring WS:

<sws:dynamic-wsdl id="holiday"  
    portTypeName="HumanResource" 
    locationUri="/holidayService/" 
    targetNamespace="http://mycompany.com/hr/definitions"> 
    <sws:xsd location="/WEB-INF/hr.xsd"/> 
</sws:dynamic-wsdl> 

и эта цитата:

Идентификатор определяет URL, где WSDL может быть извлеченного. В этом случае id является праздником, что означает, что WSDL может быть получен как holiday.wsdl в контексте сервлета. Полный URL-адрес обычно будет http://localhost:8080/holidayService/holiday.wsdl

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