Non file upload Multipart in Spring MVC - java

I've got a terrible SOAP WSDL, and all attempts to do a codegen with JAXB/CXF/Axis failed to generate usable code. In order to build a web service out of it, I started implementing it out of a Spring MVC Controller.
Things were OK until one of the services had to receive a SOAP/MTOM+XOP request. I tried using Commons FileUpload through org.springframework.web.multipart.commons.CommonsMultipartResolver but it returns no files. That's understandable because the MTOM attachments are not files per se. And they do not have a file name. Just a Content-ID.
Is there a way to obtain these attachments?

Related

How to invoke existing SOAP webservice into REST API Spring boot application

I have a Rest Spring boot application, I need to invoke external SOAP webservice in my Rest Spring boot application - similar question asked in stackoverflow - Calling a SOAP service using REST service but didn't get any exact steps. One blog I found the solution but don't know whether it right approach or not - https://docs.oracle.com/cd/E19340-01/820-6767/aeqgc/index.html
Let me know if anyone knows the solution. Whether need to create wsdl in Spring boot rest application or directly convert the json to xml and invoke the endpoint ?
The WSDL is provided by the SOAP Web service. You can get it by visiting its WSDL endpoint url.
The idea is that once you get the WSDL , copy it to your project folder and then use some maven plugin to generate a SOAP client from the WSDL. Here is the spring official guide for how to do it.
You operate the generated client in the java object level and it will help to format the SOAP request in the correct XML format and then send out .So you do not need to manually create the XML request by yourself.

How to write soap client if Request and Response classes are not provided

I am new at spring framework and web programming. I need to write client using spring boot. I was provided api and functions I need to use. As I discovered, provided web service uses soap which is new to me. I tried to follow the official spring guide: https://spring.io/guides/gs/consuming-web-service/
As I understood, I need to use Request and Response classes generated from wsdl to specify request and response objects for exchange. But in wsdl there are no such classes. I see similar names like getCarsListRequest and this is not xsd type(which are generating) but < message >
wsdl link

Creating SOAP WS in Java and get the request as a String

I was wondering if it was actually possible to create a Java SOAP Webservice without using it's WSDL.
Context:
The idea is that I have to mock a webservice, so I have its WSDL. The mock will only read the soap request, search if there are any similar request (as key in a map) and send the matching response (as its value). This is for automated testing purpose. The problem is not the "map" part.
Anyway, I've been using Axis and eclipse to generate classes and files and load them in tomcat from the WSDL. So far it've been a mess, with a lot of compatibility issues between these components. And it's gonna be much more difficult to compare the input or serialize the output to do what I want this way.
I thought about creating a REST endpoint and send the soap request through it (so I would directly get the SOAP request !), but I rode somewhere that soap request weren't valid and wouldn't be retreived by the REST endpoint... Also, won't the client application throw an error if there is no WSDL at this address ?
My question is:
Is there a way to create an access point, that looks like a SOAP Webservice (from clients), but which allows me to get the full soap request (as a String for example) and send a response (still as a String) inside a Java app?
Complements:
I'm looking for something, a library, maybe just an annotation on Servlets, that doesn't needs (if possible) to generate a huge load of classes and xml files everywhere. The app would be running on tomcat (but I can be a basic Java app). Using maven and spring wouldn't be a problem.
Thanks in advance !
Normally, clients do not require an WSDL. But it is a nice feature - use a normal servlet and handle the "?WSDL" manually. Then use some simple XPath or parse logic to extract the payload as a DOM document.

Writing Contract-First Web Service using Spring Integration

I need to create a SOAP based Web Service using Spring Integration which will process the request payload in a Service Activator and then generate and send the appropriate response.
WSDL file is in my hand along with XSDs for request and response message. So I need to create the web service using WSDL.
If anyone can provide any example or tutorial on this subject??
Looks like Spring Integration Sample on the matter gives you answers.
And some info in the Reference Manual
You need to configure Spring WS infrastructure (see its documentations).
Refer your <int-ws:inbound-gateway> to the org.springframework.ws.server.endpoint.mapping.UriEndpointMapping as defaultEndpoint.
And go ahead with other your business logic.

Does Spring Framework support streaming mode in multipart requests

I coulnd't find any indication in Spring documentation that it support read of files in streaming mode in its object MultipartHttpServletRequest that handle multipart requests.
in similar way that is possible in Apache Commons framework.
is it supported in Spring at all?
Yes, have a look here. Your Spring API is far too old. Also, the Streaming mode has nothing to do with Spring. It is the ability of your servlet container or your server. Most server now support the streaming mode. Servlet will start performing the request as soon as it got the header from your request. You can continue to send out the stream of your request body (e.g. multipart data). However, the parsing can only be performed completely when the request is sent fully. This is the same as Apache Common FileUpload.
Alternatively, you can write a controller using Spring annotation. Spring will inject the ServletRequest if you add that as one of your method controller arugument. After that, you can use Apache FileUpload to do multipart parsing.
You can not do selective parsing since the request must be fully sent to server no matter what. It is the limit of Http. I asked the question a few day ago.

Categories