Consume SOAP Web services from spring with security header - spring-boot

I'm getting deprecated message for the bean Wss4jSecurityInterceptor. I'm using >spring-boot-starter-ws(1.4.7-RELEASE). spring-ws-security(2.4.4-RELEASE), org.apache.ws.security wss4j (1.6.9).
How to add the username token to consume SOAP services using Spring WebService Template ?

Sorry..Silly error..Need to upgrade to "org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor;"...wss4j2 instead of wss4j.
However still Null pointer exception " Received Fault message for request Exception=null.
Settled. The application message exception object isn't extracted properly from the SoapFaultClientException.. e.getSoapFault().getFaultDetail()

Related

Feign is giving Exception code 0 instead of 503 when calling service unavailable

I am using feign client to call other microservice but when the calling service is down feign should give the exception of "503 service unavailable" but it giving exceptionCode = 0 with the message "Loadbalance does not have an available server to the client".
If the service is down, I want to hit the ErrorDecoder and retry the call, but Feign is giving 0 exception codes, so it cannot reach the error decoder.
What I am missing?
Check your service is registered with the discovery server.
Check your spring properties 'spring-application-name' is equal to feignClient annotation's value properties

How to access Request headers in Spring Web services PayloadValidatingInterceptor

I am currently working on a Spring Web services(SOAP) project. The requirement is to validate the request payload and return the error response if validation fails and log it. I have extended PayloadValidatingInterceptor to return custom validation message.
As part of logging requirement, we need to print the header values from Request Headers (HttpServletRequest) for tracking purpose.
How to access HttpServletRequest in the implementation of PayloadValidatingInterceptor?
Is it possible to inject HttpServletRequest?
version details:
Spring-Boot : 2.2.6
Spring-ws-core : 3.0.8
Please help.

RuntimeException is not displaying the error message in postman

I am using spring boot restful API every time I try
if(userRepository.findByEmail != null) Throw new RuntimeException("This email already exists");
I don't get the message back I only get the error with an empty message in postman instead I get only inside spring boot command the message I passed in RuntimeException.
They've changed this in Spring 2.3.0, to see the error message through postman you need to add server.error.include-message=always in your properties file (application.properties)

Implementing XSD's Exception Classes in Spring Web Service (SOAP)

I'm creating a SOAP web service in Spring Boot using Spring WS. The service I am recreating is a clone of a Service running on older technology which uses JavaX JWS, with the classes generated from an XSD.
The issues I have are linked/the same really:
1. I can't seem to 'receive' Exceptions thrown in the 'new' Web Service back to the consumer.
2. When querying the endpoint in SOAPUI, the Exception class for the Web Service appears as if it is a one-way method.
I believe this is because Spring WS isn't correctly implementing/understanding the Exception classes.
When an exception is thrown in the new service, the consumer receives a com.sun.xml.internal.ws.fault.ServerSOAPFaultException, rather than the Exception thrown in the Web Service.
The original JavaX service returns (using TestException as an example):
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>Test</faultstring>
<detail>
<ns2:TestException xmlns:ns2="http://test.co.uk/">
<code>abc123</code>
<message>Test</message>
</ns2:TestException>
</detail>
</S:Fault>
</S:Body>
</S:Envelope>
I can't find any documentation or guidance on how the exception should be build/configured to produce the same <ns2> nested element. Is there a way to accurately pass the exception back so that it appears the same as it would in the service?
Here are some examples of implementing custom exception resolver which extends AbstractEndpointExceptionResolver and defines SOAP fault mapping for different exception types: example 1, example 2, example 3.

Getting Error message as NULL while invoking a service in one spring boot application from another spring boot application using RestTemplate

AM trying to invoke a spring boot microservice from another application.
Here is my Server code, if any exception occurs
return ResponseEntity.status(HttpStatus.FORBIDDEN)
.body(new com.test.models.ResponseEntity("Tenant details
not found"));
Here is my client code,
ResponseEntity<Object> uploadResponse =
restTemplate.exchange("http://TESTAPPLICATION/v1/object",
HttpMethod.POST, requestEntity, Object.class);
Am getting a response as
Caused by: org.springframework.web.client.HttpClientErrorException: 403 null
If I hit my endpoint from PostMan, am getting proper response message.
But from my client-side application am getting response message as null. Please let me know what is going wrong.
UPDATE:
Screenshot.
Client Responds with INTERNAL_SERVER_ERROR. But from my server iam responding 403.

Resources