WebService 问题

子木007 发布于 2011/08/07 22:33
阅读 1K+
收藏 2

初次使用 WebService (JAXWS RI + jdk 6的WebService 注释) 有些疑问请各位指教。

1.  有2个class 里面都用到了某个JavaBean, 把这2个class发布为WebService。生成客户端代码后,能否也共用此JavaBean(这里指的客户端自动生成的bean)?   因为在生成客户端代码的时候要指定package,  这样自然就把不同的WebService 放到不同的包里面,客户端的某些bean 的内容是相同的,有没有啥方法复用。

2. 访问 webservice 的时候, 一般怎么解决安全问题。 最简单的比如必须登录才可以访问。

以下是问题补充:

@子木007:再补充个问题, 经过试验, List 是可以作为参数、返回值传递的, 但是 Map 不可以。 请问各位有什么办法么? 你们是怎么做的? (2011/08/08 17:27)
加载中
0
foxbrother
foxbrother

对于问题1 :

生成客户端代码的时候不要指定包名,按照默认的来就可以了。bean只是组织数据的一种形式而已。

对于问题2 :

可选的方案很多

1)在soap头中添加信息,如加入约定好的用户名密码。

2)https加密。这里又分两种,一种是服务端提供https形式的接口,这种单向加密,只是数据做了加密;另一种是双向加密,就是服务端有客户端的公钥,客户端有服务端的公钥,同时各自保存自己私钥。

1)和2)的第一种我都用过,2)的双向加密 没用过,希望对lz有帮助。

foxbrother
foxbrother
@hunterli : Hi,信息是可以加密的,对称加密非对称加密都可以。哈哈
hunterli
hunterli
1)在soap头中添加信息,如加入约定好的用户名密码。 这样http包被截取,会不会造成用户名密码的泄漏?
0
子木007
子木007
周一了, 希望得到您的指教
0
子木007
子木007
求 XDJM 们解答!
0
hunterli
hunterli

试着解答下,不一定对,有两种方案:

1.做成一个服务、多个操作的形式,这样,服务内部的类型即可共用。

2.不要指定包名,而是通过指定类型的namespace,一般代码生成工具都可设置参照namespace来生成包路径。这样,即使是两个服务,只要他们包含的某个类型的namespace相同,名字相同,最终就会生成到同一包路径下。

0
我是新手
我是新手

路过,看一下,

0
子木007
子木007

谢谢 @hunterli   @武金鑫  

我试试。 再问一下, 生成客户端代码 和 通过代码的方式直接生成 WebService 代理,  这两种方式孰优孰劣?

面对现实如何忠于理想
面对现实如何忠于理想
我对于参数类型复杂的就自动生成了,比如传一些复杂的对象之类的,如果是基本类型如字符串,int型等就自己写好了,很容易!
子木007
子木007
@hunterli : 我是想怎么能够方便的和WebService 解耦
hunterli
hunterli
我一直都是自动生成,简单方便。
0
子木007
子木007

继续谢谢各位。

另外发现 

style = SOAPBinding.Style.DOCUMENT, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED

可以返回 List 类型。 比 Sytel.RPC 方便不少, 不过还没弄明白两者的区别

0
RainJ
RainJ

我也是到现在还没明白,Document和RPC的区别,不过我一直用的都是Document/literal,这样生成的SOAP是可读的,但是比较大。对于你的情况建议用Document.

区别相见:http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/


子木007
子木007
谢谢
0
子木007
子木007

Google一番找到解决方案了, 不想用 Jaxb 对hashmap 序列化的话,可以用一个hashmap 的包装类,测试正常。

public class HashMapWrapper<K, V> {

    public class HashMap<K, V> map;

}

// That's all!

0
子木007
子木007

还有个疑问, 客户端生成的那些 JavaBean 可能不太适合在项目中调用, 而且这样做就和这些生成的代码耦合到了一起。

请问,你们是如何处理的?  本地建一个同样的Bean?  

返回顶部
顶部