马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
媒介
调用WebService接口的方式有很多,今天记载一下,利用 Spring Web Services 调用 SOAP WebService接口
一.导入依靠
- <!-- Spring Boot Web依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <!-- Spring Web Services -->
- <dependency>
- <groupId>org.springframework.ws</groupId>
- <artifactId>spring-ws-core</artifactId>
- </dependency>
- <!-- Apache HttpClient 作为 WebService 客户端 -->
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- </dependency>
- <!-- JAXB API -->
- <dependency>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- <version>2.3.1</version>
- </dependency>
- <!-- JAXB 运行时 -->
- <dependency>
- <groupId>org.glassfish.jaxb</groupId>
- <artifactId>jaxb-runtime</artifactId>
- <version>2.3.5</version>
- </dependency>
复制代码 二.创建请求类和相应类
根据SOAP的示例,创建请求类和相应类
SOAP示例
- 请求
- POST *****************
- Host: **************
- Content-Type: text/xml; charset=utf-8
- Content-Length: length
- SOAPAction: "http://*******/DownloadFileByMaterialCode"
- <?xml version="1.0" encoding="utf-8"?>
- <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- <soap:Body>
- <DownloadFileByMaterialCode xmlns="http://*******/">
- <MaterialCode>string</MaterialCode>
- <FileType>string</FileType>
- <Category>string</Category>
- </DownloadFileByMaterialCode>
- </soap:Body>
- </soap:Envelope>
- 响应
- HTTP/1.1 200 OK
- Content-Type: text/xml; charset=utf-8
- Content-Length: length
- <?xml version="1.0" encoding="utf-8"?>
- <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- <soap:Body>
- <DownloadFileByMaterialCodeResponse xmlns="http://********/">
- <DownloadFileByMaterialCodeResult>string</DownloadFileByMaterialCodeResult>
- </DownloadFileByMaterialCodeResponse>
- </soap:Body>
- </soap:Envelope>
复制代码 根据我的这个示例,我创建的请求类和相应类,是如许的
请求类
- @Data
- @XmlRootElement(name = "DownloadFileByMaterialCode", namespace = "http://*******/")
- @XmlAccessorType(XmlAccessType.FIELD)
- public class DownloadFileByMaterialCodeRequest {
- @XmlElement(name = "MaterialCode", namespace = "http://*******/")
- private String MaterialCode;
- @XmlElement(name = "FileType", namespace = "http://*******/")
- private String FileType;
- @XmlElement(name = "Category", namespace = "http://*******/")
- private String Category;
- }
复制代码 相应类
- @Data
- @XmlRootElement(name = "DownloadFileByMaterialCodeResponse", namespace = "http://********/")
- @XmlAccessorType(XmlAccessType.FIELD)
- public class DownloadFileByMaterialCodeResponse {
- @XmlElement(name = "DownloadFileByMaterialCodeResult", namespace = "http://********/")
- private String DownloadFileByMaterialCodeResult;
- }
复制代码 三.创建ObjectFactory类
- @XmlRegistry
- public class ObjectFactory {
- // 创建 DownloadFileByMaterialCodeRequest 的实例
- public DownloadFileByMaterialCodeRequest createDownloadFileByMaterialCodeRequest() {
- return new DownloadFileByMaterialCodeRequest();
- }
- // 创建 DownloadFileByMaterialCodeResponse 的实例
- public DownloadFileByMaterialCodeResponse createDownloadFileByMaterialCodeResponse() {
- return new DownloadFileByMaterialCodeResponse();
- }
- }
复制代码 四.设置WebServiceTemplate
- @Configuration
- public class WebServiceConfig {
- @Bean
- public WebServiceTemplate webServiceTemplate() {
- Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
- marshaller.setContextPath("org.jeecg.modules.webservice"); // 包路径,包含请求和响应对象类
- WebServiceTemplate template = new WebServiceTemplate(marshaller);
- return template;
- }
- }
复制代码 五.调用WebService接口
- @Service
- public class DownloadFileService {
- @Autowired
- private WebServiceTemplate webServiceTemplate;
- public List<ResponseJsonObject> downloadFile(String materialCode, String fileType, String category) throws JsonProcessingException {
- String uri = "http://192.168.***.***/DYDServiceTest/PlmService.asmx"; // WebService 的 URL
- // 创建请求对象并设置参数
- DownloadFileByMaterialCodeRequest request = new DownloadFileByMaterialCodeRequest();
- request.setMaterialCode(materialCode);
- request.setFileType(fileType);
- request.setCategory(category);
- // 设置 SOAPAction
- String soapAction = "http://********/DownloadFileByMaterialCode"; // Web 服务指定的 SOAPAction
- // 使用 SoapActionCallback 来设置 SOAPAction 头
- SoapActionCallback soapActionCallback = new SoapActionCallback(soapAction);
- // 发送 SOAP 请求并获取响应
- DownloadFileByMaterialCodeResponse response = (DownloadFileByMaterialCodeResponse)
- webServiceTemplate.marshalSendAndReceive(uri, request, soapActionCallback);
- // 获取并返回 DownloadFileByMaterialCodeResult
- String downloadFileByMaterialCodeResult = response.getDownloadFileByMaterialCodeResult();
- System.out.println(downloadFileByMaterialCodeResult);
- //字符串转换为ResponseJsonObject对象
- ObjectMapper objectMapper = new ObjectMapper();
- // 忽略未知字段
- objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- List<ResponseJsonObject> ResponseJsonObjects = objectMapper.readValue(downloadFileByMaterialCodeResult, objectMapper.getTypeFactory().constructCollectionType(List.class, ResponseJsonObject.class));
- return ResponseJsonObjects;
- }
- }
复制代码 六.测试代码
- @Test
- public void test1() throws JsonProcessingException {
- List<ResponseJsonObject> responseJsonObjects = downloadFileService.downloadFile("CCPT0016-QBY-7", "", "");
- for (ResponseJsonObject responseJsonObject : responseJsonObjects) {
- System.out.println(responseJsonObject.getDocName());
- }
- }
复制代码 测试效果
这里在附上全部文件的路劲图,可以参考一下
总结
根据接口给出的SAOP的示例,封装好对应的实体类,因为我这里的类型都是String,大家也可以根据实际情况,封装好对应的类
留意注解的参数,namespace = "http://*******/" 给接口提供的域名地址
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |