Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

569
Vistas
Spring WS/boot: ¿Cómo configurar la propiedad WebServiceTemplate en el interceptor del cliente?

Mi aplicación es tanto servidor SOAP como Cliente, es decir, actúa como un servidor proxy entre los clientes y el proveedor de servicios web. Así que recibo diferentes solicitudes de clientes y haré la validación y las enrutaré al servicio SOAP de destino configurando las configuraciones SSL/TS apropiadas. Estoy usando Spring WS para hacer una llamada de servicio web SOAP. El siguiente código funciona bien:

 try { webServiceTemplate.setMessageSender(certManager.setKeystores()); // perform the transaction SOAPResponse = (JAXBElement<Response>) webServiceTemplate .marshalSendAndReceive(SoapRequest); } catch(Exception e) { // catching a broad exception here because many things can go wrong, //but any exception means total failure throw new ServiceException(e); }

Pero estoy probando un enfoque diferente en el que configuro la configuración SSL en el interceptor del cliente:

 public class AppClientInterceptor implements ClientInterceptor{ private static final Logger LOGGER = LoggerFactory .getLogger(AppClientInterceptor.class); @Autowired WebServiceTemplate webServiceTemplate; @Autowired CertManager certManager; @Override public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { // pull out the request from the current thread try { LOGGER.info("before setting message sender"); if(webServiceTemplate!=null) webServiceTemplate.setMessageSender(certManager.setKeystores()); else System.out.println("web service tempate is null"); return false; } catch (GeneralSecurityException | IOException e) { // TODO Auto-generated catch block LOGGER.info("In catch block unable to set keystores"); e.printStackTrace(); } return false; }

El interceptor del cliente se invoca cuando realizo la llamada al servicio web, pero falla porque la plantilla del servicio web es nula. Conecté la plantilla del servicio web, pero no puedo entender por qué es nula. La plantilla de servicio web que utilicé es la siguiente:

 @Bean public WebServiceTemplate webServiceTemplate() { WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); webServiceTemplate.setMarshaller(jaxb2Marshaller()); webServiceTemplate.setUnmarshaller(jaxb2Marshaller()); ClientInterceptor[] interceptors = {new AppClientInterceptor()}; webServiceTemplate.setInterceptors(interceptors); webServiceTemplate.setDefaultUri( "https://destinationserver.com:10072"); return webServiceTemplate; }

¿Puedo establecer la configuración SSL en mi interceptor de la manera anterior? ¿Es un enfoque correcto?

Gracias por adelantado

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Probó la anotación @Configurable antes de la definición de clase?

 @Configurable public class AppClientInterceptor implements ClientInterceptor{ ... }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda