项目整合第三方接口web Service服务

1.WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。
2.优点 软件的重复使用 可以不考虑客户端类型 兼容性高
缺点 性能差
3.Java web Service 分为两种 Axis2 和 CXF
3.1 Axis2 多语言支持 CXF 侧重支持java+spring
项目整合第三方接口web Service服务_第1张图片
4.CXF

            
		org.springframework.boot
		spring-boot-starter-web-services
	
	
		org.apache.cxf
		cxf-rt-frontend-jaxws
		3.1.6
	
	
		org.apache.cxf
		cxf-rt-transports-http
		3.1.6
	

4.1创建服务端口

package com.primeton.mq.service;

import javax.jws.WebService;

@WebService(name = “DemoService”, // 暴露服务名称
targetNamespace = “http://service.mq.primeton.com”// 命名空间,一般是接口的包名倒序
)
public interface DemoService {

public String sayHello(String user);

}

4.3创建实现类
package com.primeton.mq.service.impl;

import com.primeton.mq.service.DemoService;

import javax.jws.WebService;
import java.util.Date;

@WebService(serviceName = “DemoService”, // 与接口中指定的name一致
targetNamespace = “http://service.mq.primeton.com”, // 与接口中的命名空间一致,一般是接口的包名倒
endpointInterface = “com.primeton.mq.service.DemoService”// 接口地址
)
public class DemoServiceImpl implements DemoService {

@Override
public String sayHello(String user) {
    return user+",现在时间:"+"("+new Date()+")";
}

}
4.4 配置CXF
package com.primeton.mq.webServiceConfig;

import com.primeton.mq.service.DemoService;
import com.primeton.mq.service.impl.DemoServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;

@Configuration
public class CxfConfig {

@Bean
public ServletRegistrationBean dispatcherServlet() {
    return new ServletRegistrationBean(new CXFServlet(),"/demo/*");
}

@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
    return new SpringBus();
}

@Bean
public DemoService demoService() {
    return new DemoServiceImpl();
}

@Bean
public Endpoint endpoint() {
    EndpointImpl endpoint = new EndpointImpl(springBus(), demoService());
    endpoint.publish("/api");
    return endpoint;
}

}

5.启动SpringBoot
输入http://localhost:8090/demo/api?wsdl即可,注意我设置的端口是8090,视情况而定。
项目整合第三方接口web Service服务_第2张图片
注意:实现WebService客户端 1 生成客户端的代码
2 通过地址动态调用

6.创建客户端
在idea中进入File > New Project…菜单打开新建项目窗口,依次选择Java、WebServices,Version项选择Apache Axis,Libraries项选择 Download。然后点击Next按钮进入下一页。
项目整合第三方接口web Service服务_第3张图片
在下一页中输入项目名称,然后点击Finish按钮开始下载依赖包。依赖包下载完成后进入新建的项目。
项目整合第三方接口web Service服务_第4张图片
选WebServices > Generate Wsdl From Java Code,生成wsdl
项目整合第三方接口web Service服务_第5张图片
然后选择服务地址
项目整合第三方接口web Service服务_第6张图片
1 生成客户端的代码
确定之后,创建一个测试类,代码如下:
package test;

import example.DemoServiceImplService;

public class demo {

public static void main(String[] args) {
    DemoServiceImplService webServiceImpl = new DemoServiceImplService();
    String result = webServiceImpl.getDemoServiceImplPort().sayHello("没有说");
    System.out.println("===========================================");
    System.out.println(result);
    System.out.println("===========================================");
}

}

2 通过地址动态调用
package com.primeton.mq.test;

import com.primeton.mq.service.DemoService;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

public class demo {

public static void main(String[] args) {
    //创建动态客户端
    JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
    Client client = factory.createClient("http://localhost:8090/demo/api?wsdl");
    // 需要密码的情况需要加上用户名和密码
    //client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
    HTTPConduit conduit = (HTTPConduit) client.getConduit();
    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
    httpClientPolicy.setConnectionTimeout(2000);  //连接超时
    httpClientPolicy.setAllowChunking(false);    //取消块编码
    httpClientPolicy.setReceiveTimeout(120000);     //响应超时
    conduit.setClient(httpClientPolicy);
    //client.getOutInterceptors().addAll(interceptors);//设置拦截器
  try{
      Object[] objects = new Object[0];
      // invoke("方法名",参数1,参数2,参数3....);
      objects = client.invoke("sayHello", "sujin");
      System.out.println("返回数据:" + objects[0]);
  }catch (Exception e){
      e.printStackTrace();
  }

}

你可能感兴趣的:(java)