自话自说
挤地铁、上班、吃饭、打球。基本上现在的生活每天都是这样,少了些激情,多了些安稳。
生活可以平平淡淡,但是不可以乱七八糟。
Spring Boot整合webservice实现客户端远程调用
其实我自己也没有接触过webservice开发,可能是技术太早了吧。但是项目里面避免不了远程调用,而对于那些有些年头的系统来说,他们就是开发的webservice服务。所以还是避免不了去学习一下这门技术。
根据wsdl生成客户端代码
生成方式有好多种,本文就介绍用jdk生成的方法,其他的请各位看官自行百度即可。
wsimport -keep -d D:\webserviceClient\d -s D:\webserviceClient\s -p com.map -verbose http://你的wsdl地址
参数说明:
- -keep:是否生成java源文件
- -d:指定.class文件的输出目录
- -s:指定.java文件的输出目录
- -p:定义生成类的包名,不定义的话有默认包名
- -verbose:在控制台显示输出信息
- -b:指定jaxws/jaxb绑定文件或额外的schemas
- -extension:使用扩展来支持SOAP1.2
执行以上代码会将用到的客户端代码生成出来,每个wsdl生成的都是不一样的。
引入jar包
maven引入如下:
<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>
Spring Boot配置客户端
配置如下:
@Configuration
public class WSClient {
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.cebpubservice.receiveservice");
return marshaller;
}
@Bean
public ReceiveClient countryClient(Jaxb2Marshaller marshaller) {
ReceiveClient client = new ReceiveClient();
client.setDefaultUri("http://ip:port/xxxxxService");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
}
客户端代码如下:
public class ReceiveClient extends WebServiceGatewaySupport {
public ReceiveResponse getResponse() throws DatatypeConfigurationException {
Receive receive = new Receive(); // 这个就是请求参数
ReceiveResponse response = (ReceiveResponse) getWebServiceTemplate()
.marshalSendAndReceive(receive, (message) -> {
// 设置请求头
Token token = new Token();
ObjectFactory factory = new ObjectFactory();
SoapHeaderElement tokenElement = ((SoapMessage)message).getSoapHeader().addHeaderElement(factory.createToken(token).getName()); tokenElement.setText("234234234234");
message.writeTo(System.out);
});
return response;
}
}
测试例子如下:
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
ReceiveClient receiveClient;
@GetMapping("/receive")
public void receice() throws DatatypeConfigurationException {
receiveClient.getResponse();
}
}
以上就是整个对接webservice的流程,希望对大伙有帮助!