Springboot SOAP service unmarshalling Issue with the response from WebServiceTemplate

Multi tool use
Multi tool use


Springboot SOAP service unmarshalling Issue with the response from WebServiceTemplate



I am really bugged with an unmarshalling issue with the response from the SOAP service. I am using springboot application and WebServiceTemplate for calling an existing SOAP service. I am using below code to set up beans for marshalling and webservicetemplate. Any help is highly appreciated.



On calling webServiceTemplate.marshalSendAndReceive(request); I am expecting TravelResponse object but it is giving me JAXBElement<TravelResponse> object as response. I need help to understand
1) why is it giving above response instead of TravelResponse
2) How to convert to TravelResponse


webServiceTemplate.marshalSendAndReceive(request);


TravelResponse object


JAXBElement<TravelResponse> object


TravelResponse


TravelResponse



Code snippet below:


@Bean
Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setContextPath("com.cater.trip.simple_api.trip.v1");
return jaxb2Marshaller;
}

@Bean
public WebServiceTemplate webServiceTemplate() throws Exception {
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setMessageFactory(getMessageFactory());
webServiceTemplate.setMarshaller(jaxb2Marshaller());
webServiceTemplate.setUnmarshaller(jaxb2Marshaller());
webServiceTemplate.setDefaultUri(defaultUri);
webServiceTemplate.setMessageSender(getMessageSender());
return webServiceTemplate;
}

@Bean
public SaajSoapMessageFactory getMessageFactory() {
return new SaajSoapMessageFactory();
}

@Bean
public HttpComponentsMessageSender getMessageSender() {
return new HttpComponentsMessageSender();
}


@Override
public Object getData( ) {
ObjectFactory clientFac = new ObjectFactory();
TravelRequest request = populateRequest(clientFac);
TravelResponse res = (TravelResponse) webServiceTemplate.marshalSendAndReceive(request);
return res;
}




2 Answers
2



As per Spring's documentation, WebServiceTemplate.marshalSendAndReceive() returns non-unmarshalled response.


WebServiceTemplate.marshalSendAndReceive()



So, you can do this to return the expected response.


JAXBElement<TravelResponse> res = (JAXBElement<TravelResponse>) webServiceTemplate.marshalSendAndReceive(request);

return res.getValue();



Try JaxbIntrospector.getValue to get the actual response from JAXB element.



TravelResponse response = JaxbIntrospector.getValue(jaxbElement);






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

vorI U8,TY5KXdWKy8cI0t0,umq YLw2XW0OK6Ta,WwpqWGrymydmfBqMcw,lG1sn8UDM3DqlnI6ij5HI f0C
7rQ,Wro5i5MOmpQLqfiver

Popular posts from this blog

PySpark - SparkContext: Error initializing SparkContext File does not exist

django NoReverseMatch Exception

Audio Livestreaming with Python & Flask