webservice 动态调用使用技巧

参考使用

  • maven 引用
 <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
  • 代码
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("echo.wsdl");
 
Object[] res = client.invoke("echo", "test echo");
System.out.println("Echo response: " + res[0]);

常见问题

  • org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element
    忽略错误即可 但是需要注意实际是否需要进行数据校验(以下代码同时添加了一个client 的cache 处理)
 
public class WsClient {
 
    private  static  final  Logger logger = LoggerFactory.getLogger(WsClient.class);
    private  static final Cache<String, Client> cache = Caffeine.newBuilder()
            .expireAfterAccess(10, TimeUnit.MINUTES)
            .maximumSize(10_000)
            .build();
 
    public static  Client createClient(String endpoint) {
        logger.info("create ws client:{}",endpoint);
        Client client = JaxWsDynamicClientFactory.newInstance().createClient(endpoint + "?wsdl");
        // ignore validation-event-handler fix https://access.redhat.com/solutions/2047853
        client.getRequestContext().put("set-jaxb-validation-event-handler", false);
        return client;
    }
    public static Client getClient(String endpoint) {
       return cache.get(endpoint,wsURL->createClient(wsURL));
    }
}

说明

JaxWsDynamicClientFactory 内部是比较复杂了,使用了动态代码编译以及类加载机制,可以简化我们很多ws 调用的处理

参考资料

https://cxf.apache.org/docs/dynamic-clients.html

posted on   荣锋亮  阅读(200)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-12-18 mojolicious perl web 框架简单试用
2020-12-18 explain.depesz.com 在线pg查询计划查看工具
2020-12-18 Vertically Scaling PostgreSQL
2020-12-18 gitpod 强大的快速提供开发环境的工具
2019-12-18 wal2json java jdbc 试用
2019-12-18 wal2json docker 试用
2019-12-18 wal2json Dockerfile

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示