我爱佳娃
BlogJava
首页
新随笔
联系
聚合
管理
随笔-124 评论-194 文章-0 trackbacks-0
CXF:咋总差一点呢?
最近想用PERL通过SOAP与JAVA通信,想到了XFIRE,现在叫CXF提供的服务。但总是差一点成功。
第一步,
由于用了SPRING,所以最先看了这篇文章:
Writing a service with Spring
服务是建成功了,PERL和JAVA是可以正常通信了,详见
上篇文章
可是CXF自己的CLIENT生成代码却访问“自定义结构数组”的函数不成功:
public List<DeviceValue> sendAlarmArr (List<DeviceValue> arr);
第二步,
左试右试不成功,甚至去试了Axis2,但那个生成的WSDL把上面的结构变成AnyType,估计不对。
又回来,看了
Aegis绑定
,我还找到将它用到SPRING里的方法:
<
beans
xmlns
="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws
="http://cxf.apache.org/jaxws"
xsi:schemaLocation
="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
>
<
import
resource
="classpath:META-INF/cxf/cxf.xml"
/>
<
import
resource
="classpath:META-INF/cxf/cxf-extension-soap.xml"
/>
<
import
resource
="classpath:META-INF/cxf/cxf-servlet.xml"
/>
<
bean
id
="serviceClass"
class
="com.exchangebit.nms.magic.NotifyServiceImpl"
/>
<
bean
id
="aegisDatabinding"
class
="org.apache.cxf.aegis.databinding.AegisDatabinding"
/>
<
bean
id
="serviceFactory"
class
="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"
>
<
property
name
="dataBinding"
ref
="aegisDatabinding"
/>
</
bean
>
<
bean
id
="serverBeanFactory"
class
="org.apache.cxf.frontend.ServerFactoryBean"
init-method
="create"
>
<
property
name
="address"
value
="/NotifyService"
/>
<
property
name
="bindingId"
value
="http://schemas.xmlsoap.org/soap/"
/>
<
property
name
="serviceBean"
ref
="serviceClass"
/>
<
property
name
="serviceFactory"
ref
="serviceFactory"
/>
</
bean
>
<
jaxws:endpoint
id
="notifyService"
implementor
="com.exchangebit.nms.magic.NotifyServiceImpl"
address
="/NotifyService"
>
<!--
jaxws:serviceFactory>
<ref bean="serviceFactory"/>
</jaxws:serviceFactory
-->
</
jaxws:endpoint
>
</
beans
>
其实,跟前一种JAX-WS的方式转换非常简单,把其中的注释去掉就是Aegis绑定,注释掉就是JAX-WS。
客户端没有在SPRING里试成功,但写代码也相当简单,Aegis真好:
getBean (
"
notifyClient
"
);
ClientProxyFactoryBean factory
=
new
ClientProxyFactoryBean();
factory.setServiceClass(NotifyService.
class
);
factory.setAddress(
"
http://127.0.0.1:8080/ebnms/NotifyService
"
);
factory.getServiceFactory().setDataBinding(
new
AegisDatabinding());
NotifyService client
=
(NotifyService) factory.create();
DoTest (client);
这次,到是CXF的SERVER和CLIENT都可以正常通信了。但我不说也知道啦,PERL又出问题了!
第三步,
又进一步搜,才知道Document, Literal, RPC, Encoding对SOAP消息的影响,
这篇文章
(
中文的
)相当好!
大义是RPC/Encoding将方法名称放入了operation节中,并且消息里含有类型信息,不方便检验。
而Document/Literal通过增加WSDL复杂度,将方法名、参数类型全部放入了types一节,方便了处理。
而SOAP::Lite只支持RPC/Encoding的方式,但也有办法让它形成Doc/Lit的消息:
点这里
。
但,这种方法只支持JAX-WS的服务,Aegis的PERL就会出错了。
所以,不管用哪种要么JAVA的CLIENT和SERVER通信有问题,不然就是把PERL拒之门外。我怀疑是不是CXF的JAX-WS的数组处理有问题,不然Aegis为何不出错?另外,Aegis对PERL的消息不够宽容,本已是Doc/Lit格式,只是带有TYPE信息也会出错。
不知如何解,先记在此,以后回过头来再研究了。
posted on 2007-08-07 21:39
我爱佳娃
阅读(2898)
评论(1)
编辑
收藏
所属分类:
Perl
、
web技术
评论:
#
re: CXF:咋总差一点呢?
2011-05-10 22:58 |
lty
请问您cxf返回复杂类型怎么做呢?
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
一目了然PERL编码,是转的
perl不用export,自动加入自己的搜索和动态链接库环境
哭了:整一天Java Runtime exec的挂死(不退出)问题,原来是酱子
PERL通过CPAN和PROXY来安装
do/eval/requir区别
PAR和PP
ACTIVEPERL在LINUX下的安装以及PERL2EXE的使用
一种不需要WSDL用CXF(原XFIRE)访问PERL(SOAP::Lite)编写的WEB SERVICE
PERL中遇到Your vendor has not defined Fcntl macro F_GETFL解决方法
CXF:咋总差一点呢? (续:已解决)
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
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
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(19)
给我留言
查看公开留言
查看私人留言
随笔分类
(134)
ActiveMQ(1)
AJAX(10)
DB相关(6)
Hibernate(6)
javascript(5)
JAVA基础(8)
MAC(4)
maven(3)
Perl(15)
Spring(4)
SSL(5)
web技术(7)
岁月留情(3)
工具使用(16)
开源库(1)
服务配置(23)
正则表达式(1)
系统设计(4)
网管(7)
自写类库(1)
记事(4)
随笔档案
(123)
2021年3月 (1)
2020年1月 (1)
2012年12月 (2)
2012年11月 (1)
2012年9月 (1)
2012年8月 (1)
2011年10月 (3)
2011年9月 (2)
2011年7月 (2)
2011年6月 (1)
2011年2月 (1)
2010年5月 (1)
2010年4月 (2)
2010年3月 (1)
2009年9月 (1)
2009年7月 (1)
2009年6月 (1)
2009年5月 (2)
2009年4月 (1)
2009年3月 (2)
2009年2月 (2)
2008年12月 (1)
2008年11月 (1)
2008年10月 (1)
2008年9月 (2)
2008年8月 (2)
2008年7月 (1)
2008年6月 (4)
2008年5月 (5)
2008年3月 (2)
2008年2月 (3)
2008年1月 (1)
2007年12月 (3)
2007年11月 (9)
2007年10月 (3)
2007年9月 (5)
2007年8月 (6)
2007年7月 (6)
2007年6月 (9)
2007年5月 (7)
2007年4月 (6)
2007年3月 (3)
2007年1月 (2)
2006年12月 (6)
2006年11月 (4)
2005年11月 (1)
我的博客
我的爱好博客
最新随笔
1. 我用过的机械键盘
2. 爆米花A410更新及通过NFS点播mac资源
3. livestatus在MAC下的编译
4. CAS多点登陆之“非主流”配置方式
5. 转的:果然是5分钟配成TOMCAT使用SSL(https)
6. 如何在extjs的PANEL里用d3.js来绘图
7. MAC 10.8 安装 MYSQL
8. 一目了然PERL编码,是转的
9. perl不用export,自动加入自己的搜索和动态链接库环境
10. 4.8以上SSHD配置特定用户只能在特定目录SFTP,不能进行其它命令操作
搜索
积分与排名
积分 - 549858
排名 - 88
最新评论
1. re: 在spring中实现rmi回调(callback)功能
这算个毛线回调
--wwar
2. re: CAS多点登陆之“非主流”配置方式[未登录]
感谢感谢!!
--Jack
3. re: 哭了:整一天Java Runtime exec的挂死(不退出)问题,原来是酱子[未登录]
原来是这样,多谢楼主
--123
4. re: SPRING循环依赖(circular reference)的解决方法
谢谢,加上 lazy-init="true"问题解决了
--liabco
5. re: DWR Reverse Ajax功能实践的要点
logger.info ("WebContext1"+servletContext);得到的值为空啊
--zwl
阅读排行榜
1. Mylyn――谁用谁知道!(45416)
2. SPRING循环依赖(circular reference)的解决方法(38267)
3. Join用法,HQL的方法,Hibernate中的fetch(33563)
4. 天生一对"Maven2+Jetty" -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试(25784)
5. 目前发现的最好最快的直接在ECLIPSE中JETTY调试方式(19608)
评论排行榜
1. 用OpenSSL做自签名的证书(14)
2. 感触最深的几条设计哲学(12)
3. SPRING循环依赖(circular reference)的解决方法(11)
4. 《红楼梦》作曲王立平语(11)
5. 用PowerDesigner生成Hibernate映射文件的步骤(11)