xfire做webservice传递复杂对象

windowboy 2009-02-26 10:11:46
大家好,用xfire做了一个webservice,我服务器端和客户端都实现了值传递javabean。
现在要扩展一些功能,就是 客户段传递的复杂对象;
客户端-----》服务器端 1.客户端发送sendFunction(List):这个list里面封装的是javabean,服务器端返回 boolean型数据
客户端-----》服务器端 2.客户端发送getList(String str):要求服务器端返回一个list<javabean>
客户端-----》服务器端 3.客户端发送modList(String[] str):服务器端返回 boolean型数据
客户端-----》服务器端 4.客户端发送getListData(String str):服务器端返回 String[]数组
请问有哪位对这个比较熟悉,能否指点一下,或者给我一份参考,我在网上找了,但是也没有实现。
谢谢!
...全文
1816 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
深情程序猿 2010-10-20
  • 打赏
  • 举报
回复
刚好遇到这个问题,学习下,顶!
stoneyang2005 2009-03-09
  • 打赏
  • 举报
回复
我想services.xml存在的意思是,既然web.xml 对xfire的类进行了加载,那么xfire相对的META-INF和services.xml就必须存在,不然xfire则不允许部署吧。
windowboy 2009-03-09
  • 打赏
  • 举报
回复
非常感谢大家
windowboy 2009-03-06
  • 打赏
  • 举报
回复
非常感谢stoneyang2005,我看了你的博客,上面写的很好。
我修改了一下,如果要xfire结合spring,那么这个services.xml可以放到spring中去就可以。
spring中的配置。
<bean id="BbtForumService"
class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory" ref="xfire.serviceFactory" />
<property name="xfire" ref="xfire" />
<property name="serviceBean" ref="cmdbServiceImpl" />
<property name="serviceClass"
value="com.thbs.interact.webService.IcmdbDAO" />
<property name="name" value="cmdbService" />
</bean>
还有一点不是很明白,就是我把这个配置加到spring中了,但是空的services.xml一定要存在,如果删除这个文件,系统就报错。
stoneyang2005 2009-03-05
  • 打赏
  • 举报
回复
我这里面有例子哈,http://blog.csdn.net/stoneyang2005/archive/2009/02/24/3931841.aspx,你看一下哪里看不明白请留言。
diggywang 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhoubl668 的回复:]
需要序列化复杂结构
引用 4 楼 diggywang 的回复:
对你说过了,将复杂对象序列化成XML 字符串再传递,不要直接使用复杂对象作参数,而是使用字符串;如果使用复杂对象,你用xfire发布的webservice,.net应用系统或ruby之类的其它异构系统调用不能保证正确性。

[/Quote]

使用XStream
beck_zhou 2009-03-03
  • 打赏
  • 举报
回复
需要序列化复杂结构
[Quote=引用 4 楼 diggywang 的回复:]
对你说过了,将复杂对象序列化成XML 字符串再传递,不要直接使用复杂对象作参数,而是使用字符串;如果使用复杂对象,你用xfire发布的webservice,.net应用系统或ruby之类的其它异构系统调用不能保证正确性。
[/Quote]
lovezx1028 2009-03-02
  • 打赏
  • 举报
回复
很好
diggywang 2009-02-26
  • 打赏
  • 举报
回复
将复杂对象统统转成xml,既保证异构系统也可使用,又降低传递的数据量,提高性能。
可尝试一下XStream。
阿鹏兄 2009-02-26
  • 打赏
  • 举报
回复
对象先序列化,再反序列化
TopestCoder 2009-02-26
  • 打赏
  • 举报
回复
XML是王道……
diggywang 2009-02-26
  • 打赏
  • 举报
回复
对你说过了,将复杂对象序列化成XML 字符串再传递,不要直接使用复杂对象作参数,而是使用字符串;如果使用复杂对象,你用xfire发布的webservice,.net应用系统或ruby之类的其它异构系统调用不能保证正确性。
windowboy 2009-02-26
  • 打赏
  • 举报
回复
这个好像不是xfire弄的webservice,我现在想用xfire实现websercie的传递复杂对象,能否指点一下,谢谢!
zx27600 2009-02-26
  • 打赏
  • 举报
回复
很简单,分两步:
(1)在webservice工程下的WEB-INF增加一个配置文件server-config.wsdd,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin" />
<parameter name="enableNamespacePrefixOptimization"
value="true" />
<parameter name="dotNetSoapEncFix" value="true" />
<parameter name="disablePrettyXML" value="true" />
<parameter name="sendXsiTypes" value="true" />
<parameter name="sendMultiRefs" value="true" />
<parameter name="sendXMLDeclaration" value="true" />
<requestFlow name="RequestFlow1">
<handler name="Handler1"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler name="Handler2"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<responseFlow name="ResponseFlow1">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
<handler name="Handler1" type="LocalResponder" />
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
<requestFlow name="RequestFlow1">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" />
<parameter name="className" value="org.apache.axis.Version" />
</service>

<!-- 开放一个服务 -->
<service name="gsStatus" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className"
value="web.GsStatusImp" />
<parameter name="scope" value="Request" />
<namespace>nss</namespace>
<beanMapping languageSpecificType="java:po.DeliveryInformation"
qname="ns:Messages"
xmlns:ns="urn:BeanService"/>
<beanMapping languageSpecificType="java:po.DeSOAPHeader"
qname="ns:DeSOAPHeader"
xmlns:ns="urn:BeanService"/>

</service>
<transport name="http">
<requestFlow name="RequestFlow1">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler" />
</transport>
<transport name="local">
<responseFlow name="ResponseFlow1">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
</transport>
</deployment>


(2)客户端如下:
package test;

import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import po.DeliveryInformation;
public class TestWsUseAxis {
public static void main(String[] args) {
try {
String url = "http://219.148.199.4:9082/gsStatusWS/services/gsStatus";//状态报告
Service service = new Service();
Call call = (Call) service.createCall();
QName qn = new QName("urn:BeanService","Messages");
call.registerTypeMapping(DeliveryInformation.class,qn,new BeanSerializerFactory(DeliveryInformation.class, qn),new BeanDeserializerFactory(DeliveryInformation.class, qn));
call.setTargetEndpointAddress(new java.net.URL(url));
call.setOperationName(new QName("http://soapinterop.org/","notifySmsDeliveryReceipt")); //状态报告
String correlator = "correlator_value";
DeliveryInformation d = new DeliveryInformation();
d.setAddress("gz");
d.setDeliveryStatus("0");
call.invoke(new Object[]{correlator,d});
} catch (ServiceException e) {
e.printStackTrace();
System.out.println("Service 获取 Call对象失败!");
} catch (MalformedURLException e) {
e.printStackTrace();
System.out.println("new java.net.URL(url)错误!");
} catch (RemoteException e) {
e.printStackTrace();
System.out.println("远程错误!");
}
}
}
目  录  一 使用Axis和XFire发布Web Service ......................................................................................... 2  1.1 准备工作............................................................................................................................ 2  1.1.1 新建工程 ................................................................................................................. 2 1.1.2 axis依赖文件 ........................................................................................................... 3 1.1.3 XFire依赖文件 ........................................................................................................ 3 1.2 Axis发布Web Service ........................................................................................................ 4  1.2.1 传递简单数据类型的Web Service ........................................................................ 4 1.2.2 带自定义对象传递的Web Service ........................................................................ 8 1.3 XFire发布Web Services ................................................................................................... 10  1.3.1 传递简单数据类型的Web Service ...................................................................... 10 1.3.2传递复杂数据类型的Web Service ....................................................................... 12 附录: 1Server的结构 ............................................................................................................. 16 二 调用Web Services .................................................................................................................... 17  2.1 准备工作.......................................................................................................................... 17  2.1.1 新建工程 ............................................................................................................... 17 2.1.2 启动Tomcat上发布的1Server服务 ................................................................... 17 2.2 Axis发布的Web Service调用方式 ................................................................................. 18  2.2.1 Dynamic Invocation Interface (DII)方式 ................................................................. 18 2.2.2 Dynamic Proxy方式 ............................................................................................... 19 2.2.3 Stubs方式 .............................................................................................................. 20 2.3调用XFire发布的Web Service ....................................................................................... 22  2.3.1服务以jar包形式发布的时候 直接调用 ............................................................ 23 2.3.2 使用Axis的Client包 ........................................................................................... 23 2.3.3 使用Xfire的Client包 .......................................................................................... 24 附录2:2Client目录结构 ..................................................................................................... 31

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧