1.1.34.12. fejezet, SOAP kliens
Beküldte pzoli - 2024, november 17 - 11:47de
Kapcsolódó hivatkozások
- Consuming a SOAP web service
- ForrasUploadSOAPClient (Github repo)
- Spring WS Add Soap Header in Client
Osztályok generálása WSDL-ből
Kommunikációs osztályok generálására használjuk a jaxws-maven-plugin bővítményt a pom.xml-ben:
<plugins> ... <plugin> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> <configuration> <packageName>hu.infokristaly.forrasuploadsoapclient.wsdl</packageName> <wsdlUrls> <wsdlUrl>http://localhost:8080/ws/FileUploadServiceWsdl.wsdl</wsdlUrl> <!-- Saját WSDL forrás --> </wsdlUrls> <sourceDestDir>${sourcesDir}</sourceDestDir> <destDir>${classesDir}</destDir> <extension>true</extension> </configuration> </plugin> ... <plugins>
FileUploadClient
A SOAP hívás a következőként történik:
package hu.infokristaly.forrasuploadsoapclient; import jakarta.activation.DataHandler; import jakarta.activation.FileDataSource; import org.springframework.ws.client.core.support.WebServiceGatewaySupport; import hu.infokristaly.forrasuploadsoapclient.wsdl.UploadRequest; import hu.infokristaly.forrasuploadsoapclient.wsdl.UploadResponse; import java.io.File; public class FileUploadClient extends WebServiceGatewaySupport { public UploadResponse uploadFile(String fileName) { UploadRequest request = new UploadRequest(); File ufile = new File(fileName); request.setFileName(ufile.getName()); FileDataSource ds = new FileDataSource(ufile); DataHandler dh = new DataHandler(ds); request.setContent(dh); return (UploadResponse) getWebServiceTemplate() .marshalSendAndReceive("http://localhost:8080/ws/fileupload", request); } }
Szükségünk lesz még egy sorosító konfigurálására (MarshallerConfiguration.java):
package hu.infokristaly.forrasuploadsoapclient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; @Configuration public class MarshallerConfiguration { @Bean public Jaxb2Marshaller marshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); // meg kell egyeznie a csomagnévvel amit a pom.xml-ben meghatároztunk (jaxws-maven-plugin -> configuration ->packageName) marshaller.setContextPath("hu.infokristaly.forrasuploadsoapclient.wsdl"); return marshaller; } @Bean public FileUploadClient fileUploadClient(Jaxb2Marshaller marshaller) { FileUploadClient client = new FileUploadClient(); client.setDefaultUri("http://localhost:8080/ws"); client.setMarshaller(marshaller); client.setUnmarshaller(marshaller); return client; } }
Az alkalmazásunk pedig így indul:
package hu.infokristaly.forrasuploadsoapclient; import hu.infokristaly.forrasuploadsoapclient.wsdl.UploadResponse; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class ForrasUploadSOAPClient { public static void main(String[] args) { SpringApplication.run(ForrasUploadSOAPClient.class, args); } @Bean CommandLineRunner lookup(FileUploadClient fileUploadClient) { return args -> { if (args.length > 0) { UploadResponse response = fileUploadClient.uploadFile(args[0]); System.err.println(response.getReturn()); } }; } }
Hogy Tomcat szerver ne induljon, a pom.xml-be vegyük fel a spring-boot-starter-web-services függőséget a következőként:
<dependencies> ... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>
Kód generálás
Ahhoz hogy a WSDL-ből osztályok legyenek, le kell fordítani azt a következő parancssal:
mvn compile
Ez a target könyvtárba a pom.xml-ben megadott csomagba létrehozza az osztályok forrását. Ha újra kell generálni az osztályokat, töröljük a target könvytárat.
- A hozzászóláshoz be kell jelentkezni