jb9+axis

blue_tina_ 2004-04-09 02:35:11
我初学axis,当遇到复杂数据类型时,都不知道应该怎么映射,比如返回值是一个LIst,List里面是多个bean的实例,bean的很多属性又是一个集合,用jb9自动生成好像也不准确哦,手动改的话不知道怎么改,要改那个文件(wsdd还是wsdl),哪里有详细的说明呢?我看过的例子都是
特简单的那种,一点实际遇到的问题都没提,谁能告诉我哪里有这方面的文档可以参看??省得我每遇到一个问题就到论坛上问了,:(
...全文
37 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
usabcd 2004-04-09
  • 打赏
  • 举报
回复
我建议你直接使用对象数组。而不是使用java.util.*里的东西;
数组才是通用的,这样你的Web Service才能与其他语言的SOAP SDK交流,
否则与外界交流会出现很多麻烦。
客户端除了注册那个对象外也需要注册一个对象数组

qname = new QName(uri, "ArrayOf_tns1_MyJavaBean");
map.register(
MyJavaBean[].class,
qname,
new ArraySerializerFactory(),
new ArrayDeserializerFactory());

这样返回的结果就可以直接强制转换了。
blue_tina_ 2004-04-09
  • 打赏
  • 举报
回复
我又看了一遍axis的例子,我觉得axis好狡猾阿,它是用bean数组来实现的,内部类型当然一目了然了,可是list(hashmap)集合怎么声明内部类型呢?
我觉得wsdl文件里应该有类似下面的标记,客户端才明白吧(我乱写的):

<complexType name="list">
<sequence>
<element name="item" >
<complexType>
<sequence>
<element name="key" type="anyType" />
<element name="value" type="com.....bean" />
</sequence>
</complexType>
</element>
</sequence> </complexType>
blue_tina_ 2004-04-09
  • 打赏
  • 举报
回复
非常非常感谢你的回复!
我就是按照你的这个思路去做的。整个开发框架的搭建我是理解的,我的主要问题还是出现在
在wsdd描述文件里配置复杂数据类型序列化上,上面这个javabean的例子我也是理解的,但是如果是LIst(包含多个bean)的话,虽然list本身axis是认识的,可是如果不声明它内部的
对象是那中bean类型的话,客户端如何反序列化呢??
usabcd 2004-04-09
  • 打赏
  • 举报
回复
Axis 的开发看起来比较繁琐,但搞多了你就会很快
总结出一定的套路。复杂的应用也是有简单组合起来的。
在进行开发之前,你需要先确定:这个Web Service需要向外部
提供那些接口。接口的参数和返回值。最好就写出个java接口文件。
然后先做个空的类来实现这个接口。
然后再针对这个类编写wsdd文件。然后照标准的方法deploy 这样就搭起了一个
框架。最后再在类中实现具体的功能。并编写客户端测试。
其中我认为比较核心的事情,就是对象序列化。
凡是不属于基本类型的对象都需要序列化。因为axis需要知道怎样
把对象解析称xml文本在后传输。
wsdd里最重要的内容也就是指明那些对象需要序列化。
下面是一个wsdd的例子:

<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:ns="urn:Test">

<service name="MyService" provider="java:RPC" style="rpc" use="encoded">

<parameter name="wsdlTargetNamespace" value="Test"/>
<parameter name="className" value="com.xxx.xxx.MyServiceSOAPBindingImpl"/>
<parameter name="allowedMethods" value="*"/>

<typeMapping
qname="ns:MyJavaBean"
type="java:com.xxx.xxx.MyJavaBean"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</service>
</deployment>


这里MyJavaBean是自定义的JavaBean,需要注册。
其他都是通用的套路。
如果你返回的是一个List 而这个List里包含多个JavaBean
那么List本身不需要注册 axis会认得。
至于发布的方法和客户端的代码示例,你可以参考axis上的例子。

67,513

社区成员

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

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