—cxf与gsoap交互
--》编写头文件:add.h
加入方法
//gsoap ns service name: add
//gsoap ns service namespace: http://localhost/add.wsdl
//gsoap ns service location: http://localhost
//gsoap ns service executable: add.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:add
int ns__add( int num1,int num2,int* sum);
--》gsoap工具生成服务器代码
soapCpp.exe add.h
--》生成vc工程
soapServerLib.cpp 不要加入工程否则编译报错。
--》用cxf wsdl2java工具生成java调用代码
E:\mysoft\apache-cxf-2.7.6\bin>wsdl2java -impl -server -client -d outputDir add
.wsdl
outputDir 文件夹下会生成
├─outputDir
│ │ build.xml
│ │
│ ├─add
│ │ Add.java
│ │ AddResponse.java
│ │ ObjectFactory.java
│ │ package-info.java
│ │
│ └─localhost
│ └─add_wsdl
│ Add.java
│ AddPortType.java
│ AddPortTypeImpl.java
│ AddPortType_Add_Client.java
│ AddPortType_Add_Server.java
--》eclipse建立工程 拷贝代码 加入相应jar包
生成的代码里面, @XmlElementRef(name = "sum", type = JAXBElement.class, required = false)
会报错,去掉required = false,就ok了。
add.java里几个构造函数可以注释掉。
--》撰写cxf客户端测试类
//定义JaxWs的代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//设置JaxWs代理工厂的属性,包括服务类和地址
factory.setServiceClass(AddPortType.class);
factory.setAddress("http://localhost:50001/AddPortType");
//获取服务类的对象并处理
AddPortType addPortType = (AddPortType) factory.create();
int result = addPortType.add(1, 2);
System.out.println(result);
其中AddPortType 是工具自动生成的接口实现类。(对应wsdl文件中的
--》总结
总体上 webservice实现起来还是比较麻烦,Rest可以用json进行异构交互,实现起来应该相对简单些,c++的rest开源框架比较少,最近微软好像开源了一个Rest框架,有时间研究下。