Consume WCF Service in Java Spring Boot

23 Views Asked by At

I have a client to a SOAP service I do not control (implemented in .NET). The service provides a WSDL. I use JAX-WS's toolset to generate the java client from the WSDL (specifically, the jaxws-maven-plugin for Maven, which uses wsimport under the hood).

The response below is received.

2024-03-02 16:59:21.141 ERROR 20616 --- [nio-9091-exec-3] c.e.n.client.controller.RestController : org.springframework.ws.soap.client.SoapFaultClientException: The security context token is expired or is not valid. The message was not processed. at org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:38) at org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:787) at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:601) at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:538) at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390) at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384) at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:374)

i have setup an interceptor (code below), ensured that the keystore has the certificates from service provide and a self-signed certificate from dev environments.

@Autowired
    public WebServiceSecurityInterceptor(
            KeyStoreCallbackHandler securityCallbackHandler,
            CryptoFactoryBean cryptoFactory
    ) throws Exception {
        super();

        setValidationActions(
                WSHandlerConstants.TIMESTAMP
                        + " "
                        + WSHandlerConstants.SIGNATURE
                        + " " + WSHandlerConstants.ENCRYPT);
        setValidationSignatureCrypto(cryptoFactory.getObject());
        setValidationDecryptionCrypto(cryptoFactory.getObject());
        setValidationCallbackHandler(securityCallbackHandler);

        // set security actions
        setSecurementActions(
                WSHandlerConstants.TIMESTAMP + " " +
                        WSHandlerConstants.SIGNATURE + " " +
                        WSHandlerConstants.ENCRYPT);

        // sign the request
        setSecurementUsername(SIGNING_USERNAME);
        setSecurementPassword(PASSWORD);
        setSecurementSignatureCrypto(cryptoFactory.getObject());
        setSecurementSignatureAlgorithm(WSS4JConstants.RSA);

        // encrypt the request
        setSecurementEncryptionUser(ENCRYPTION_USER);
        setSecurementEncryptionCrypto(cryptoFactory.getObject());
        setSecurementEncryptionParts("{Content}{}Body");
        setSecurementSignatureKeyIdentifier("IssuerSerial");
        setSecurementEncryptionKeyTransportAlgorithm(WSS4JConstants.KEYTRANSPORT_RSA15);
        setSecurementEncryptionSymAlgorithm(WSS4JConstants.TRIPLE_DES);
    }
0

There are 0 best solutions below