2017-03-27 14 views
0

처음에는 끔찍한 영어를 유감스럽게 생각합니다. 나는 봄 WS 구성의 조각을 다음 있습니다 :WS WS에서 서비스 wsdl을 service.wsdl로 전달하는 방법

@Configuration 
class WSConfig { 

    ... 

    @Bean 
    Wsdl11Definition wsdlSchema() { 

     SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); 
     wsdl11Definition.setWsdl(new ClassPathResource("service.wsdl")); 

     return wsdl11Definition; 
    } 
} 

그래서 내가 URL */service.wsdl를 사용하여 WSDL 파일을 얻을 수 있습니다.

URL 전송을 추가 할 수 있습니까? */service? wsdl -> */service.wsdl 일부 WS 클라이언트는 URL */service? wsdl을 사용합니다.

답변

0

가능한 해결 MessageDispatcherServlet

class CustomMessageDispatcherServlet extends MessageDispatcherServlet { 

private static final String WSDL_SUFFIX_NAME = ".wsdl"; 

private Map<String, WsdlDefinition> wsdlDefinitions; 

CustomMessageDispatcherServlet(ApplicationContext applicationContext) { 

    super(); 
    setApplicationContext(applicationContext); 
    setTransformWsdlLocations(true); 
    setTransformSchemaLocations(false); 
} 

@Override 
protected void initStrategies(ApplicationContext context) { 

    super.initStrategies(context); 
    initWsdlDefinitions(context); 
} 

private void initWsdlDefinitions(ApplicationContext context) { 

    wsdlDefinitions = BeanFactoryUtils 
      .beansOfTypeIncludingAncestors(
        context, WsdlDefinition.class, true, false); 
} 

// here with dealing with "wsdl" parameter in HTTP GET request 
@Override 
protected WsdlDefinition getWsdlDefinition(HttpServletRequest request) { 

    if (HttpTransportConstants.METHOD_GET.equals(request.getMethod()) && 
      (request.getRequestURI().endsWith(WSDL_SUFFIX_NAME) || request.getParameter("wsdl") != null)) { 

     String fileName = WebUtils.extractFilenameFromUrlPath(request.getRequestURI()); 
     return wsdlDefinitions.get(fileName); 

    } else { 
     return null; 
    } 
} 

}을 확장하고