资讯专栏INFORMATION COLUMN

使用 Apache cxf 实现 WebService 客户端

mingzhong / 606人阅读

摘要:证书有两种形式指定路径有三种形式的插件可以指定参数来解决一下常见的问题下的可以选择所需的命令参数使用参考添加解决中命名冲突添加指定自动生成的包名

ws-client-demo

客户端调用远程服务

http://localhost:8280/services/HelloWorld?wsdl

spring + cfx 配置 maven

添加依赖包


  org.apache.cxf
  cxf-rt-frontend-jaxws
  3.2.3


  org.apache.cxf
  cxf-rt-transports-http
  3.2.3
wsdl2java

把 HelloWorld.wsdl 下载到 resources 当中

使用 maven 插件 cxf-codegen-plugin 生成代码

  
    org.apache.cxf
    cxf-codegen-plugin
    3.2.2
    
      
        generate-sources
        generate-sources
        
          ${project.build.directory}/generated/cxf
          
            
              ${basedir}/src/main/resources/HelloWorld.wsdl
            
          
        
        
          wsdl2java
        
      
    
  

maven compile 任务完成之后在targetgeneratedcxfcomexampledemows 下会有很多文件

    CurrentDate.java
    CurrentDateResponse.java
    HelloWorld.java
    HelloWorldImplService.java
    ObjectFactory.java
    package-info.java
    SayHi.java
    SayHiResponse.java
调用 WebService 使用 spring

把 HelloWorld.java 复制到 srcmainjavacomexampledemows 目录下

同时 HelloWorld.java 里面 @XmlSeeAlso({ObjectFactory.class})这行代码删掉




    
package com.example.demo;

import com.example.demo.ws.service.HelloWorld;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.xml.datatype.XMLGregorianCalendar;

public class Main {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorld client = (HelloWorld) context.getBean("helloClient");

        String resp1 = client.sayHi("小明");
        System.out.println(resp1);
        XMLGregorianCalendar resp2 = client.currentDate();
        System.out.println(resp2.toString());
    }
}
不使用 spring
package com.example.demo;

import com.example.demo.ws.service.HelloWorld;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;

public class WithoutSpring {
    public static void main(String[] args) throws MalformedURLException {
        URL wsdlURL = new URL("http://localhost:8280/services/HelloWorld?wsdl");
        QName SERVICE_NAME = new QName("http://service.ws.demo.example.com/", "HelloWorldImplService");
        Service service = Service.create(wsdlURL, SERVICE_NAME);
        HelloWorld client = service.getPort(HelloWorld.class);
        String result = client.sayHi("小红");
        System.out.println(result);
    }
}

可以直接运行的demo

GitHub https://github.com/openmartin...

其他配置

demo 中是比较简单的情况,但是实际的情况会更复杂,下面介绍一下常用的配置

SSL Certificate and Proxy

参考 https://cxf.apache.org/docs/c...

在 applicationContext.xml 可以为web service client 配置proxy 和 ssl cert,完全不用写代码。

ssl 证书有两种形式 pkcs12、jks, 指定路径有三种形式 url、file、resource




    

        
            
                
            
            
            
            
            
                
                .*_EXPORT_.*
                .*_EXPORT1024_.*
                .*_WITH_DES_.*
                .*_WITH_AES_.*
                .*_WITH_NULL_.*
                .*_DH_anon_.*
            
        
        

    
    
    

cxf-codegen-plugin

cxf 的 maven 插件可以指定参数来解决一下常见的问题(下的可以选择所需的wsdl2java命令参数使用)

参考 http://cxf.apache.org/docs/ws...

添加-autoNameResolution 解决wsdl中命名冲突

添加-p packagename 指定自动生成的包名

      
        org.apache.cxf
        cxf-codegen-plugin
        3.2.2
        
          
            generate-sources
            generate-sources
            
              ${project.build.directory}/generated/cxf
              
                
                  ${basedir}/src/main/resources/HelloWorld.wsdl
                  
                    -autoNameResolution
                    -verbose
                    -p
                    com.example.demo.ws
                  
                
              
            
            
              wsdl2java
            
          
        
      

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76334.html

相关文章

  • RPC框架是啥之Apache CXF一款WebService RPC框架入门教程

    摘要:支持相关规范和标准,包括同上。支持多种传输协议和协议绑定数据绑定。构建端还有其服务实现,接口使用注解,标明是一个远程服务接口。然后编写一个的启动程序,并运行,我想你会成功的因为我看到了下图是一种跨平台的技术协议。 本博客 猫叔的博客,转载请申明出处 学习系列 RPC框架是啥? RPC框架是啥之Java自带RPC实现,RMI框架入门 Apache CXF一款WebService RP...

    SolomonXie 评论0 收藏0
  • SpringBoot 使用CXF 集成WebService

    摘要:启动后我们直接输入项目地址指定的服务名会看到生成的。测试在这就不写了,大家可以使用生成客户端,或者直接使用发送格式数据进行请求。总结使用集成开发很简单,不用在单独的部署到外部上,这为我们熟悉开发的同学带了很好的体验。 1、写在前面 WebService 对我来说既熟悉又陌生,已经将近六七年没有看到过他了, 具体的介绍我就不多少了, 想了解的百度百科下说的很详细。 之所以突然研究WebS...

    miracledan 评论0 收藏0
  • Java系统WebService:Spring与CXF的集成

    摘要:我们再使用这样的来查看这个服务具体的定义这个用以通过查看服务也就是我们开头所说的用通用格式来描述的功能入参和返回值,使我们的调用者明白服务的使用方法具体详情可以查看我们的这个服务的页面。 WebService是什么呢?顾名思义,是Web系统提供的服务,其目的呢,往大了说:是系统实现多异构模块协同合作,服务实现SOA(Services oriented Architecture面向服务的...

    waterc 评论0 收藏0
  • 使用CXF搭建WebServices服务端

    摘要:使用创建工程,引入和,如下在中配置和创建要提供服务接口和实现接口类实现类配置文件注意引入和,然后添加要提供的接口信息全文如下配置完成后,部署到,启动访问即可看到服务已成功发布。客户端实现见下文使用实现客户端 1 使用Maven创建Java Web工程,引入cxf和spring,pom.xml如下 4.0.0 com.liubo test-cxf 0.0...

    hatlonely 评论0 收藏0
  • WebService就是这么简单

    摘要:它使用方式,接收和响应外部系统的某种请求。回顾我们在学习基础网络编程章节已经知道了这么一个连接了。使用指定名称的命名空间。名词简单对象访问协议作为一个基于语言的协议用于有网上传输数据。以的根元素出现。代理这么一个概念就更加清晰了。 WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧.... 问题一 如果我们的网站需要提供一个天气预报这样一个需求...

    SwordFly 评论0 收藏0

发表评论

0条评论

mingzhong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<