Spring WS - Part 1
So lets start.....
My configurations files are as follows:
1) SpringWSApplicationInitializer.java
2) SpringWSApplicationConfig.java
Instead of web.xml I am using WebApplicationInitializer
spring-ws-part-2
My configurations files are as follows:
1) SpringWSApplicationInitializer.java
2) SpringWSApplicationConfig.java
Instead of web.xml I am using WebApplicationInitializer
public class SpringWSApplicationInitializer implements WebApplicationInitializer { static final Logger log = LoggerFactory.getLogger(SpringWSApplicationInitializer.class); public void onStartup(ServletContext servletContext) throws ServletException { // TODO Auto-generated method stub log.debug(" ********* Spring WS Application StartUP in Progress............ ********** "); AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(SpringWSApplicationConfig.class); /** * Configuring MessageDispatcherServlet for Spring Web Services * */ ServletRegistration.Dynamic dispatcherWS = servletContext.addServlet("springws", new MessageDispatcherServlet(context)); dispatcherWS.setInitParameter("transformWsdlLocations", "true"); dispatcherWS.setLoadOnStartup(1); //dispatcher.setAsyncSupported(true); dispatcherWS.addMapping("/ws/*"); /** * Configuring Dispatcher Servlet for Spring MVC * */ ServletRegistration.Dynamic dispatcherMVC = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); dispatcherMVC.setLoadOnStartup(1); dispatcherMVC.setAsyncSupported(true); dispatcherMVC.addMapping("/config/*"); /** * Register Character Encoding Filter */ FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("CharacterEncodingFilter", CharacterEncodingFilter.class); characterEncodingFilter.setInitParameter("encoding", "UTF-8"); characterEncodingFilter.setInitParameter("forceEncoding", "true"); characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*"); characterEncodingFilter.setAsyncSupported(true); servletContext.addListener(new ContextLoaderListener(context)); log.debug(" ********* Spring WS Application StartUP Completed ********** "); } }I have configured here two servlets, One for Spring Web MVC and another for Spring WS
@EnableWs @Configuration @EnableWebMvc @ComponentScan({"com.springws.service","com.springws.controller"}) public class SpringWSApplicationConfig extends WsConfigurerAdapter { static final Logger log = LoggerFactory.getLogger(SpringWSApplicationConfig.class); @Bean(name = "countries") public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) { DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); wsdl11Definition.setPortTypeName("CountriesPort"); wsdl11Definition.setLocationUri("/countryService/"); wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service"); wsdl11Definition.setSchema(countriesSchema); return wsdl11Definition; } @Bean public XsdSchema countriesSchema() { return new SimpleXsdSchema(new ClassPathResource("countries.xsd")); } @Bean public Jaxb2Marshaller marshaller() { Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller(); jaxb2Marshaller.setContextPath("io.spring.guides.gs_producing_web_service"); jaxb2Marshaller.setMtomEnabled(true); return jaxb2Marshaller; } @Bean public WebServiceTemplate webServiceTemplate() throws Exception { WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); webServiceTemplate.setMarshaller(marshaller()); webServiceTemplate.setUnmarshaller(marshaller()); webServiceTemplate.setDefaultUri("http://localhost:8080/ws/countryService/countries"); webServiceTemplate.setInterceptors(new ClientInterceptor[]{wss4jSecurityInterceptorClient()}); webServiceTemplate.setMessageFactory(messageFactory()); return webServiceTemplate; } /** * Adding Interceptors * */ @Override public void addInterceptors(ListNow in the above Spring WS configuration, there are lots of beans which corresponds to Interceptor, WS-Security, MTOM features and they are not required at implementing Basic Web Service. I have included all of them at the same time and we will be referencing them while exploring features on the go.interceptors) { interceptors.add(new SoapEnvelopeLoggingInterceptor()); interceptors.add(new PayloadLoggingInterceptor()); interceptors.add(new PayloadRootSmartSoapEndpointInterceptor(new CountryInterceptor(), "http://spring.io/guides/gs-producing-web-service", "getCountryRequest")); //Adding Interceptor for Spring Security //interceptors.add(wss4jSecurityInterceptor()); interceptors.add(wss4jSecurityInterceptor()); } @Bean public SaajSoapMessageFactory messageFactory() throws Exception { SaajSoapMessageFactory saajSoapMessageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance()); saajSoapMessageFactory.setSoapVersion(SoapVersion.SOAP_11); return saajSoapMessageFactory; } @Bean public DefaultMethodEndpointAdapter defaultMethodEndpointAdapter() { DefaultMethodEndpointAdapter defaultMethodEndpointAdapter = new DefaultMethodEndpointAdapter(); List list = new ArrayList (); List list2 = new ArrayList (); list.add(marshallingPayloadMethodProcessor()); defaultMethodEndpointAdapter.setMethodArgumentResolvers(list); defaultMethodEndpointAdapter.setMethodReturnValueHandlers(list2); return defaultMethodEndpointAdapter; } @Bean public MarshallingPayloadMethodProcessor marshallingPayloadMethodProcessor() { MarshallingPayloadMethodProcessor marshallingPayloadMethodProcessor = new MarshallingPayloadMethodProcessor(marshaller()); return marshallingPayloadMethodProcessor; } /** * Adding WS-Security - UserNameTokenAuthentication Interceptor * */ @Bean public Wss4jSecurityInterceptor wss4jSecurityInterceptor() { /** * The SecurementActions for UsernameToken is commented, as the * UsernameToken is to be added by the client, the server-side * interceptor would only validate that. * */ Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor(); wss4jSecurityInterceptor.setValidationActions("UsernameToken"); //wss4jSecurityInterceptor.setSecurementActions("UsernameToken"); wss4jSecurityInterceptor.setSecurementUsername("Ernie"); wss4jSecurityInterceptor.setSecurementPassword("Bert"); wss4jSecurityInterceptor.setSecurementPasswordType("PasswordText"); wss4jSecurityInterceptor.setValidationCallbackHandler(callbackHandler()); return wss4jSecurityInterceptor; } /** * Validation CallBack Handler for UserNameToken Authentication * */ @Bean public SimplePasswordValidationCallbackHandler callbackHandler() { SimplePasswordValidationCallbackHandler simplePasswordValidationCallbackHandler = new SimplePasswordValidationCallbackHandler(); Map userMap = new HashMap (); userMap.put("admin", "secret"); userMap.put("user", "pass"); userMap.put("Ernie","Bert"); simplePasswordValidationCallbackHandler.setUsersMap(userMap); return simplePasswordValidationCallbackHandler; } /** * Adding WS-Security - UserNameTokenAuthentication Interceptor * for CLIENT */ @Bean public Wss4jSecurityInterceptor wss4jSecurityInterceptorClient() { /* Please note If ValidationActions needs to be mentioned * then Validdation CallBack Handler must be there */ Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor(); //wss4jSecurityInterceptor.setValidationActions("UsernameToken"); wss4jSecurityInterceptor.setSecurementActions("UsernameToken"); wss4jSecurityInterceptor.setSecurementUsername("Ernie"); wss4jSecurityInterceptor.setSecurementPassword("Bert"); wss4jSecurityInterceptor.setSecurementPasswordType("PasswordText"); //wss4jSecurityInterceptor.setValidationCallbackHandler(callbackHandler()); return wss4jSecurityInterceptor; } /** * Adding WS-Security - DigitalSignature Interceptor * */ private CryptoFactoryBean signatureCrypto() { CryptoFactoryBean cryptoFactoryBean = new CryptoFactoryBean(); cryptoFactoryBean.setKeyStorePassword("springws"); try { cryptoFactoryBean.setKeyStoreLocation(new FileSystemResource("F:/My_Work/New_Spring_Workspaces/SpringWebServices/springwskeystore.jks")); } catch (IOException e) { // TODO Auto-generated catch block log.error(e.getLocalizedMessage(),e); } return cryptoFactoryBean; } //@Bean /*public Wss4jSecurityInterceptor wss4jSecurityInterceptorForDigitalSignature() { try{ Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor(); signatureCrypto().afterPropertiesSet(); wss4jSecurityInterceptor.setValidationActions("Signature"); wss4jSecurityInterceptor.setValidationSignatureCrypto(signatureCrypto().getObject()); return wss4jSecurityInterceptor; } catch(Exception e) { log.debug(e.getLocalizedMessage(),e); return null; } }*/ //@Bean /*public Wss4jSecurityInterceptor wss4jSecurityInterceptorForDigitalSignatureClient() { try{ Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor(); wss4jSecurityInterceptor.setSecurementActions("Signature"); wss4jSecurityInterceptor.setSecurementUsername("springws"); wss4jSecurityInterceptor.setSecurementPassword("springws"); //wss4jSecurityInterceptor.setSecurementSignatureKeyIdentifier("DirectReference"); signatureCrypto().afterPropertiesSet(); wss4jSecurityInterceptor.setValidationActions("Signature"); wss4jSecurityInterceptor.setValidationSignatureCrypto(signatureCrypto().getObject()); wss4jSecurityInterceptor.setSecurementSignatureCrypto(signatureCrypto().getObject()); return wss4jSecurityInterceptor; } catch(Exception e) { log.debug(e.getLocalizedMessage(),e); return null; } }*/ }
spring-ws-part-2
Comments
Post a Comment