`
ynp
  • 浏览: 429177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

异构语言交互访问 解决方案及例子(二)

 
阅读更多
异构语言交互访问 解决方案及例子(二)
—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文件中的<portType name="addPortType">)



--》总结
总体上 webservice实现起来还是比较麻烦,Rest可以用json进行异构交互,实现起来应该相对简单些,c++的rest开源框架比较少,最近微软好像开源了一个Rest框架,有时间研究下。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics