美文网首页
web service

web service

作者: 十二找十三 | 来源:发表于2020-03-19 15:25 被阅读0次
    1.  假设我们开发了一个web接口,想给别人用,我们要怎么办 
            1.部署接口到服务器    
            2.编写接口文档,写清楚接口是通过什么方法调的,输入参数是什么,输出参数是什么,错误时返回什么。 
            那问题来了,我们能不能只把接口部署到服务器上,然后接口不单能提供具体的服务,而且还能自动生成一份标准的接口文档,把接口信息都记录在该文档里,如果能做到,是不是能做到"接口即文档"的目的。  
            那么一个接口的信息包括哪些呢?
             1.接口地址    
             2.接口调用方法    
             3.接口输入参数    
             4.接口输出参数    
             5.接口出错返回信息    
             6..... 
        soap webservice里wsdl文件就是接口描述信息。核心的信息就是以上几个。
    
    
    2.
        由于Web service是一个平台独立,
        也就是说,使用接口的人不知道这个service是用什么技术开发的,
        可能是php可能是java等,但接口的参数和返回的数据都是一样的,要达到这种目的,就需要两个东西,
        一个是跟平台无关的数据格式,soap使用的是xml,一个是通信协议,也就是soap协议。 
    
    总结:准确的来说,webservice 不是一种技术,而是一种规范。是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互
    
    
    服务端
    
    <!--WerbService CXF依赖-->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-core</artifactId>
        <version>3.3.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.3.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.3.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>3.3.5</version>
    </dependency>
    
    
    // 接口
    package com.bc.mcode.v2;
    
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    import java.util.Map;
    
    @WebService
    public interface HelloWorld {
        public User getUser(String userId);
    
        @WebMethod(action = "getUserName")
        public String getUserName(String userId);
    
    
    
        public Map<String, User> getAllUserData();
    }
    
    // 实体类
    package com.bc.mcode.v2;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private static final long serialVersionUID = -3628469724795296287L;
    
        private String userId;
        private String userName;
        private String email;
    
        public String getUserId() {
            return userId;
        }
    
        public void setUserId(String userId) {
            this.userId = userId;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "userId='" + userId + '\'' +
                    ", userName='" + userName + '\'' +
                    ", email='" + email + '\'' +
                    '}';
        }
    }
    
    
    // 实现类
    package com.bc.mcode.v2;
    
    
    import javax.jws.WebService;
    import java.util.HashMap;
    import java.util.Map;
    
    @WebService(endpointInterface = "com.bc.mcode.v2.HelloWorld",
            serviceName = "HelloWorldService",
            portName = "HelloWorldServicePort"
    )
    public class HelloWorldImpl implements HelloWorld {
    
        private Map<String, User> userMap = new HashMap<String, User>();
    
        public HelloWorldImpl() {
    
            // 测试数据
            User user = new User();
            user.setUserId("1");
            user.setUserName("cs1");
            user.setEmail("cs1@163.xom");
            userMap.put(user.getUserId(), user);
    
            user = new User();
            user.setUserId("2");
            user.setUserName("cs2");
            user.setEmail("cs2@163.xom");
            userMap.put(user.getUserId(), user);
    
            user = new User();
            user.setUserId("3");
            user.setUserName("cs3");
            user.setEmail("cs3@163.xom");
            userMap.put(user.getUserId(), user);
    
            System.err.println("userMap==>" + userMap);
        }
    
        @Override
        public User getUser(String userId) {
            System.out.println("getUser");
            return userMap.get(userId);
        }
    
        @Override
        public String getUserName(String userId) {
            System.out.println("getUserName");
            return userMap.get(userId).getUserName();
        }
    
        @Override
        public Map<String, User> getAllUserData() {
            return userMap;
        }
    }
    
    // 启动类
    package com.bc.mcode.v2;
    
    import javax.xml.ws.Endpoint;
    
    public class Server {
    
        protected Server() throws Exception {
            // START SNIPPET: publish
            System.out.println("Starting Server");
            HelloWorldImpl implementor = new HelloWorldImpl();
            String address = "http://localhost:8080/helloworld";
            Endpoint.publish(address, implementor);
            // END SNIPPET: publish
        }
    
        public static void main(String[] args) throws Exception {
            new Server();
            System.out.println("服务端已启动V2");
        }
    }
    
    // 测试
    浏览器 http://localhost:8080/helloworld?wsdl
    
    客户端
    axiom-api-1.2.20.jar
    axiom-impl-1.2.20.jar
    axis2-adb-1.7.6.jar
    axis2-jaxws-1.7.6.jar
    axis2-kernel-1.7.6.jar
    axis2-transport-http-1.7.6.jar
    axis2-transport-local-1.7.6.jar
    commons-codec-1.2.jar
    commons-httpclient-3.1.jar
    commons-logging-1.1.1.jar
    httpcore-4.4.4.jar
    neethi-3.0.3.jar
    woden-core-1.0M10.jar
    wsdl4j-1.6.2.jar
    xmlschema-core-2.2.1.jar
    
    
    // 搭建客户端测试
    package com.ccbckj.test;
    
    import javax.xml.namespace.QName;
    
    import org.apache.axis2.AxisFault;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;
    
    public class Demo2 {
        public static void main(String[] args) {
            testApp();
        }
        
        public static void testApp(){
            String address = "http://localhost:8080/helloworld"; //
            String qname = "http://v2.mcode.bc.com/"; // namespace
            String methodName = "getUserName"; // 方法名字
            Object[] params = new Object[]{"1"}; // 调用方法的参数
            
            
            RPCServiceClient serviceClient;
            try {
                serviceClient = new RPCServiceClient();
                Options options = serviceClient.getOptions();
                EndpointReference reference = new EndpointReference(address);
                options.setTo(reference);
                QName name = new QName(qname, methodName);
                Object[] re = serviceClient.invokeBlocking(name, params, new Class[]{String.class});
                System.out.println(re[0]);
            } catch (AxisFault e) {
                e.printStackTrace();
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:web service

          本文链接:https://www.haomeiwen.com/subject/fgrlyhtx.html