springboot2.0

Easter79
• 阅读 685

首先webservice 区分调用与提供

调用方式存在两种

1. 动态调用:  基于 使用 JaxWsDynamicClientFactory 调用接口

import lombok.extern.slf4j.Slf4j;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
@Slf4j
public class WebserviceClientUtil {
    public static String callWebSV(String wsdUrl, String operationName, String... params) throws Exception {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient(wsdUrl);
        //client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
        Object[] objects;
        // invoke("方法名",参数1,参数2,参数3....);
        objects = client.invoke(operationName, params);
        log.info("webservice返回数据: " + objects[0].toString());
        return objects[0].toString();
    }
}



import org.junit.jupiter.api.Test;

public class WsdlTest {
    @Test
    public void t1() throws Exception {
        String wsdUrl = "http://168.168.0.205/cidp/ws/xxServiceWSXML?wsdl";
        String methodName = "xxxModelDatasXMLWithVague";
        // 参数非必须填时, 但还是需要传入, 不能不传入
        String[] parms = new String[]{"RY","","",""};
        String rtObj = WebserviceClientUtil.callWebSV(wsdUrl,methodName,parms);
        System.out.println(rtObj);
    }
}

2.静态调用: 自己模拟生成接口提供方的接口及业务代码, 然后像调用本地方法一样直接调用 

模拟生成接口: 使用cxf 插件, 根据wsdl 路径生成本地代码

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                            <!--<sourceRoot>src/main/java</sourceRoot>-->
                            <defaultOptions>
                                <extraargs>
                                    <extraarg>-impl</extraarg>
                                    <extraarg>-verbose</extraarg>
                                    <extraarg>-validate</extraarg>
                                    <extraarg>-client</extraarg>
                                </extraargs>
                            </defaultOptions>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>http://168.168.0.205/cidp/ws/xx/ServiceWSXML?wsdl</wsdl>
                                    <!--<wsdl>D:\code\Demo\src/main/resources/HVSService.wsdl</wsdl>-->
                                    <extraargs>
                                        <extraarg>-p</extraarg>
                                        <extraarg>com.xx.xx.admin.wsdl</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

引入后; install 下maven 项目 , 生成代码路径在target/generated 下

(即extaarg 设定的路径下) ; 复制生成的代码至项目代码中接口, 插件使用后, 即可注释

找到接口类, 不需要修改其他, 引用类, 像调用本地方法一样调用执行即可;

import com.xx.xxx.admin.wsdl.XXXXServiceWSXML;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.junit.jupiter.api.Test;

public class WsdlTest {
    @Test
    public void t1(){
        System.out.println("请求开始----");
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
        jaxWsProxyFactoryBean.setAddress("http://168.168.0.205/cidp/ws/xxxfsServiceWSXML");
        jaxWsProxyFactoryBean.setServiceClass(XXXsServiceWSXML.class);
        XxxxsServiceWSXML demo = (XxxxsServiceWSXML) jaxWsProxyFactoryBean.create();
        String rtStr = demo.getDetail("RY","","","");
        System.out.println(rtStr);

        System.out.println("请求结束");
    }


    @Test
    public void t2(){
        System.out.println("--------");
    }
}

webservice 所需依赖

<!-- webService -->
        <!-- webservice cxf -->
        <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>
        <!--        // 第一个方式没有第三个依赖会报错 Cannot find any registered HttpDestinationFactory from the Bus.-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.1.6</version>
        </dependency>
    </dependencies>
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Feign请求响应结果被截取com.fasterxml.jackson.core.io.JsonEOFException
在生产环境使用feign调用外部接口时,偶尔会出现下面错误2020101511:00:18,535ERRORcom.shein.abc.rmp.controller.RecExplainConfigControllerrec_explain_query.failffeign.codec.DecodeExc
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k