什么是CXF
Apache CXF = Celtix + Xfire

CXF的优势
(1)支持多种协议:
* SOAP1.1,1.2
* HTTP
* CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
(2)并可以与Spring进行快速无缝的整合
(3)灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),IBMWS,BeaWS上面。

CXF的目录结构
(1)bin目录
CXF 框架中所提供的可执行工具和命令
(2)docs目录
CXF 所有类(class)对应的 API 文档
(3)etc目录
包含一个基本的Service暴露所需要的web.xml文件,及其它的配置文件
(4)lib目录
lib目录中包含CXF及其运行时所需要的jar包
(5)licenses目录
引用第三方jar包的相关许可协议。
(6)modules目录
CXF框架根据不同特性分开进行编译的二进制包文件。
发布基于 CXF 框架的 Web 项目时,可以选择使用该目录下的所有 .jar 文件,也可以选择 lib目录中的 cxf-2.0.2-incubator.jar文件。
(7)samples目录
示例,包含这些示例的源代码和相关Web 应用配置文件
可以通过samples目录和它各个子目录下的 README.txt的文件来详细了解示例的编译与运行的步骤

使用CXF发布服务和调用服务
1、配置环境变量
(1)JAVA_HOME
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_181
cmd里执行 java -version
能输出对应的JDK信息

(2)CXF_HOME
变量名:CXF_HOME
变量值:E:\CXF\apache-cxf-2.4.2
将资料里的apache-cxf-2.4.2.zip解压出来的,放在了E盘的CXF文件夹里

(3)Path
Path变量里加上刚新建的环境变量,指向里面的bin目录,如果JAVA_HOME配置过了就不需要了
;%JAVA_HOME%\bin;%CXF_HOME%\bin

(4)CLASSPATH
CLASSPATH里加上,如果前面打过.;了,就不要再打了
.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes

使用CXF上传服务

创建一个maven项目cxf导入以下依赖

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>2.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>2.4.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

实体类

package com.xr.entity;

public class Users {
    private Integer id;
    private String name;

    public Users() {
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

编写服务接口

package com.xr.server;

import com.xr.entity.Users;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import java.util.List;

@WebService
/*
* 接口上打webservice*/
public interface HelloWorld {

    public String sayHello(@WebParam(name = "name") String name);
    public void add(@WebParam(name = "users") Users users);

    public @WebResult(name = "javaList")
    List<Users> usersList();
}

实现接口

package com.xr.server.impl;

import com.xr.entity.Users;
import com.xr.server.HelloWorld;

import java.util.ArrayList;
import java.util.List;

public class HelloWorldImpl implements HelloWorld {
    private List<Users> usersList=new ArrayList<Users>();
    public String sayHello(String name) {
        return name+"Hello";
    }

    public void add(Users users) {
        usersList.add(users);
    }

    public List<Users> usersList() {
        return usersList;
    }
}

上传测试

package com.xr;

import com.xr.server.impl.HelloWorldImpl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class PublishMain {
    public static void main(String[] args) {
        //获得发布的工厂bin
        JaxWsServerFactoryBean jwsf=new JaxWsServerFactoryBean();
        //设置wsdl的地址
        jwsf.setAddress("http://localhost:9999/hello");
        //设置服务的类型
        jwsf.setServiceClass(HelloWorldImpl.class);
        //服务的提供者,具体的实例
        jwsf.setServiceBean(new HelloWorldImpl());
        //发布服务
        jwsf.create();

    }
}

将地址放在浏览器中运行记得加上?wsdl

如果运行成功则会出现以下效果

java 代码转成的dll 如何反编译_java 代码转成的dll 如何反编译

使用CXF当中的csdl2java来生成客户端代码
首先在命令窗口中跳到一个空文件夹的位置
如E://wsCode文件夹
然后再写命令

E:\wsCode>wsdl2java -d .http://localhost:9999/hello

之后就会在这个文件夹下生成相对应的文件

java 代码转成的dll 如何反编译_java_02


在原先的cxf项目当中同样创建一个maven项目csfclient将E盘中wsCode文件夹中的整个com复制进这个项目

java 代码转成的dll 如何反编译_maven_03

然后再写一个测试客户最好是重新创一个包)TestClient

package com.xr.test;

import com.xr.server.HelloWorld;
import com.xr.server.Users;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import java.util.List;

public class TestClient {
    public static void main(String[] args) {
        //获得代理的工厂类
        JaxWsProxyFactoryBean proxyFactoryBean=new JaxWsProxyFactoryBean();
        //设置服务的地址
        proxyFactoryBean.setAddress("http://localhost:9999/hello");
        //设置服务类的接口类型
        proxyFactoryBean.setServiceClass(HelloWorld.class);
        //创建服务具体的实例
       HelloWorld helloWorld= (HelloWorld) proxyFactoryBean.create();
       //调用具体的方法
        String info=helloWorld.sayHello("蔡徐坤");
        Users users=new Users();
        users.setId(1);
        users.setName("哈哈");
        helloWorld.add(users);
       List<Users> usersList= helloWorld.usersList();
        for (Users users1 : usersList) {
            System.out.println(users1.getName());
        }

    }
}

运行能输出结果则成功,记得在运行这个时,前面的上传服务那块绝对不能关,不然为什么报错你都不知道