zoukankan      html  css  js  c++  java
  • spring boot 下开发webservice接口

    1、引入pom依赖

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.2.2</version>
    </dependency>

    2、编写webservice服务端

    2.1 新建接口,并添加targetNamespace,targetNamespace是接口所在包的倒序,如果不添加,在动态调用接口的时候,会报错误信息。

    import javax.jws.WebParam;
    import javax.jws.WebService;
     
    // ~ File Information
    /**
     * @author yinyl
     * @date 2020年12月27日 下午2:45:10
     * 类说明:定义接口,targetNamespace是当前所在包的倒序。
     */
    @WebService(targetNamespace="http://webservice.common.bmSystem.com")
    public interface IHelloWord {
     
        // ~ Methods
        public String say(@WebParam(name="helloName") String helloName);
     
    }

    2.2 新建接口实现类,targetNamespace与实现接口保持一致,endpointInterface为接口所在包的全路径

    import javax.jws.WebService;
     
    import org.springframework.stereotype.Component;
     
    import com.bmSystem.common.webservice.IHelloWord;
     
    // ~ File Information
    /**
     * @author zxy
     * @date 2019年9月23日 下午2:46:18
     * 类说明:接口实现类,targetNamespace是当前所在包的倒序。
     */
    @Component
    @WebService(targetNamespace="http://webservice.common.bmSystem.com",
    endpointInterface ="com.bmSystem.common.webservice.IHelloWord")
    public class HelloWordImpl implements IHelloWord{
        
        @Override
        public String say(String str) {
            System.out.println("进入接口...");
            return str;
        }
     
    }

    3、发布webservice接口

    package com.bmSystem.common.sys.config.webservice;
     
    import javax.xml.ws.Endpoint;
    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.beans.factory.annotation.Autowired;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
     
    import com.bmSystem.common.webservice.impl.HelloWordImpl;
     
    // ~ File Information
    /**
     * @author zxy
     * @date 2019年9月23日 下午3:12:00
     * 类说明:webservice发布,默认访问地址为:localhost:8080/services/helloWord?wsdl
     * 
     */
    @Configuration
    public class WebServiceConfig {
     
        // ~ Fields
        @Autowired
        private HelloWordImpl helloWord;//接口实现类
     
        // ~ Methods
        
        /**
         * 此方法作用是改变项目中服务名的前缀名,此处127.0.0.1或者localhost不能访问时,请使用ipconfig查看本机ip来访问
         * 此方法被注释后:wsdl访问地址为http://127.0.0.1:8080/services/user?wsdl
         * 去掉注释后:wsdl访问地址为:http://127.0.0.1:8080/soap/user?wsdl
         * @return
         */
        /*
         * @SuppressWarnings("all")
         * 
         * @Bean public ServletRegistrationBean dispatcherServlet() { return new
         * ServletRegistrationBean(new CXFServlet(), "/soap/*"); }
         */
        
        @Bean(name = Bus.DEFAULT_BUS_ID)
        public SpringBus springBus() {
            return new SpringBus();
        }
        
        @Bean
        public Endpoint endpoint() {
            EndpointImpl endpoint=new EndpointImpl(springBus(), helloWord);
            endpoint.publish("/helloWord");//访问地址
            return endpoint;
        }
     
    }

    以上内容在实际运用中,已实现~

    4、开发webservice客户端调用,这里采用的是动态调用方式(推荐)

    import java.util.HashMap;
    import java.util.Map;
     
    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
     
    import com.google.gson.Gson;
     
    /**
    * @author zxy
    * @date 2020年6月5日 上午9:05:06
    * @Description :  动态调用webservice接口
    */
    public class TestWebservice {
        
        public static void main(String[] args) {
                    // 创建动态客户端
                     JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
                     Client client = dcf.createClient("http://127.0.0.1:8085/services/helloWord?wsdl");
                     // 需要密码的情况需要加上用户名和密码
                     // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
                     Object[] objects = new Object[0];
                     try {
                         // invoke("方法名",参数1,参数2,参数3....);
                         //json的形式
                         Map<String,Object> params=new HashMap<String,Object>();
                         params.put("name", "dasda");
                         Gson gson = new Gson();
                         String json = gson.toJson(params);
                         objects = client.invoke("say", json);
                         System.out.println("返回数据:" + objects[0]);
                     } catch (java.lang.Exception e) {
                         e.printStackTrace();
                     }
        }
    }

    axis方式调用webservice接口:

    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
     
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
     
    public class Test01 {
        public static void main(String[] args) {
            try {
                //1、直接引用远程的wsdl文件  
                String endpoint = "接口访问路径";  
                Service service = new Service();
                Call call = (Call) service.createCall(); //创建服务
                call.setTargetEndpointAddress(endpoint);  
                //2、定义报名和接口方法
                call.setOperationName(new QName("targetNamespace", //wsdl文件中的targetNamespace
                        "getAllResourceDetail") //接口实现功能的方法
                        );
                
                //3、设置参数
                call.addParameter("resType", XMLType.XSD_INT,ParameterMode.IN);// 接口的参数  
                call.addParameter("nodeIndexCode",XMLType.XSD_STRING,ParameterMode.IN);// 接口的参数  
                call.setReturnType(XMLType.XSD_STRING);// 设置返回类型  
               
                int resType=1000;
                String nodeIndexCode="";
                
                //4、给方法传递参数,并且调用方法
                String result = (String) call.invoke(new Object[] {nodeIndexCode ,resType});  
                System.out.println(result);
            } catch (Exception e) {  
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    生产环境常见的几种JVM异常
    JVM垃圾回收时如何确定垃圾?是否知道什么是GCRoots?
    你平时工作用过的JVM常用基本配置参数有哪些?
    java X参数
    JUC之CAS
    JUC之List集合
    JUC之lock
    JUC之volatile
    BZOJ2132: 圈地计划
    BZOJ3991: [SDOI2015]寻宝游戏
  • 原文地址:https://www.cnblogs.com/yinyl/p/14197239.html
Copyright © 2011-2022 走看看