1.java引入cxf 的maven库
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.6</version>
</dependency>
2.启动类配置过滤器
@SpringBootApplication
public class TestApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(TestApplication.class,args);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(TestApplication.class);
}
/**
* 配置过滤器
*
* @return
*/
@Bean
public FilterRegistrationBean someFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(customFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("customFilter");
return registration;
}
/**
* 创建一个bean
*
* @return
*/
@Bean(name = "customFilter")
public Filter customFilter() {
return new CustomFilter();
}
}
3.过滤器解决跨域
/**
* 自定义过滤器
*/
@WebFilter(filterName = "customFilter", urlPatterns = "/*")
public class CustomFilter implements Filter {
/**
* 封装,不需要过滤的list列表
*/
private static String patterns = "";
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods", "POST,GET,PUT,OPTIONS,DELETE");
httpResponse.setHeader("Access-Control-Max-Age", "3600");
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, token");
String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
if (HttpMethod.OPTIONS.toString().equals(httpRequest.getMethod())) {
return;
}
chain.doFilter(httpRequest, httpResponse);
}
}
4.webService接口和实现类
/**
* webservice接口
* 访问地址:http://localhost:8080/webservice/webservice?wsdl
*/
@WebService
public interface AppWebService {
/**
* 登录
*
* @return
*/
@WebMethod
public String loginUser(@WebParam(name = "oper_user") String oper_user, @WebParam(name = "oper_passwd") String oper_passwd,@WebParam(name = "version") String version);
}
/**
* webservice实现类
*/
@Service
@WebService(serviceName = "AppWebService", // 与接口中指定的name一致
targetNamespace = "http://appWebService.cbb.com", // 与接口中的命名空间一致,一般是接口的包名倒
endpointInterface = "com.cbb.AppWebService" // 接口地址
)
public class AppWebServiceImpl implements AppWebService {
@Override
public String loginUser(String oper_user, String oper_passwd, String version) {
String test = "登录成功";
return test;
}
}
5.编写webService配置文件类
/**
* webservice配置
*/
@Configuration
public class WebServiceConfig {
@Autowired
private AppWebService appWebService;
/**
* 注入servlet bean name不能dispatcherServlet 否则会覆盖dispatcherServlet
* @return
*/
@Bean(name = "cxfServlet")
public ServletRegistrationBean cxfServlet() {
return new ServletRegistrationBean(new CXFServlet(),"/webservice/*"); //设置websevice目录路径/webservice/webservice?wsdl
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
/**
* 注册WebServiceService接口到webservice服务
* @return
*/
@Bean(name = "WebServiceEndpoint")
public Endpoint sweptPayEndpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), appWebService);
endpoint.publish("/webservice"); //设置路径webservice?wsdl
return endpoint;
}
}
6.Vue调用js
使用then()方法获取返回数据
const commonUrl = "http://127.0.0.1/webservice/webservice?wsdl";
//对应好java的接口路径
const xmlsHead = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webService.cbb.com/\"><soapenv:Header/><soapenv:Body>";
const xmlsfoot ="</soapenv:Body></soapenv:Envelope>";
// post请求封装--webservice请求
function webServiceRequest(url, data) {
var promise = new Promise((resolve, reject) => {
var that = this;
var d = "<web:"+url+">";
for(let key in data){
d += "<"+key+">"+data[key]+"</"+key+">";
};
d+="</web:"+url+">";
var postData = xmlsHead+d+xmlsfoot;
uni.request({
url: commonUrl + url,
data: postData,
method: "POST",
header: {
"content-type": "text/xml"
},
success: function(res) {
if(res.statusCode == 200){
var t = res.data.substring(res.data.indexOf("<return>")+8,res.data.indexOf("</return>"));
//返回服务端返回的数据
resolve(JSON.parse(t));
}else if(res.statusCode == 404){
var err = {
"code":res.statusCode,
"message":"维护中。。。"
}
resolve(err);
}else{
var err = {
"code":res.statusCode,
"message":"出错了。。。"
}
resolve(err);
}
},
error: function(e) {
var err = {
"code":404,
"message":"系统问题"
}
reject(err);
},
fail:function(){
var err = {
"code":500,
"msg":"网络出错"
}
reject(err);
}
});
});
return promise;
}
module.exports = {
wb: webServiceRequest
};