论坛首页 编程语言技术论坛

.Net(C#) 调用 java webservice 的问题[转载]

浏览 21265 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-19  

C# 调用 java webservice 的问题

Technorati 标记: c#, java, axis2, webservice

前一段时间一直被一个 c#调用 Java web service的问题困扰。

http://www.cnitblog.com/reene/archive/2007/06/29/29217.html

在网上一直找不到答案,后来在国外的一个论坛上有人提醒可能是命名空间的原因,摸索以后终于顺利解决这个问题。特别把它记下以后方便。

问题:

如果用c#调用java 的 webservice 时,发现调用返回值为基本类型(如 xsd:string xsd:int)的服务能过正常返回,而调用返回复杂类型如自定义对象时却返回 null,同时抓包发现服务器段明明已经正常答复soap消息。 就需要考虑命名空间的问题。

在我碰到的问题中,由于我把用来返回结果的bean 单独放到一个 xxx.xxx.bean 包中,而把webservice 的文件放在 xxx.xxx.service包中,在用wtp生成 webservice 服务时就把它们放到不同的命名空间中去了。

解决方案:

把用来的bean文件放置到与service同一个package中,这样用wtp lomboz之类工具生成时就直接会在一个命名空间中。

--本人备忘

最近在一个项目中,就遇到了这个问题,此文对我帮助很大,先谢谢这会兄弟了。另附一小段代码,备忘一下:

Java端的webservice中saveUser(JafUser user)方法中的JafUser类代码如下:

java 代码
  1. /**  
  2.  *   
  3.  * @author lixy 2006-12-14 10:16:04  
  4.  *  
  5.  */  
  6. public class JafUser  implements java.io.Serializable {   
  7.   
  8.   
  9.     // Fields       
  10.   
  11.      private String userId;   
  12.      private String userName;   
  13.      private Integer regionId;   
  14.         
  15.     // Constructors   
  16.   
  17.     /** default constructor */  
  18.     public JafUser() {   
  19.     }   
  20.   
  21.     public Integer getRegionId() {   
  22.         return regionId;   
  23.     }   
  24.   
  25.     public void setRegionId(Integer regionId) {   
  26.         this.regionId = regionId;   
  27.     }   
  28.   
  29.     public String getUserId() {   
  30.         return userId;   
  31.     }   
  32.   
  33.     public void setUserId(String userId) {   
  34.         this.userId = userId;   
  35.     }   
  36.   
  37.     public String getUserName() {   
  38.         return userName;   
  39.     }   
  40.   
  41.     public void setUserName(String userName) {   
  42.         this.userName = userName;   
  43.     }   
  44.   
  45.     public String toString() {   
  46.         StringBuffer sb = new StringBuffer("[ ");   
  47.         sb.append("userId = "+this.userId).append(",");   
  48.         sb.append("userName = "+this.userName).append(",");   
  49.         sb.append("regionId = "+this.regionId).append(" ]");   
  50.         return sb.toString();   
  51.     }   
  52. }  
客户端c# 代码:
  1. ConsoleApplication1.com.lixy.ws.UserServiceEx manager = new ConsoleApplication1.com.lixy.ws.UserServiceEx();   
  2. JafUser user = new JafUser();   
  3. user.userId = "lixy01";   
  4. user.userName = "lixiangyang01";   
  5. user.regionId = 4301;   
  6. user.regionIdSpecified = true;   
  7. String result = manager.saveUser(user);   
  8. Console.WriteLine("Result = " + result);   
  9. Console.ReadLine();   

regionIdSpecified 虽然不是JafUser对象()中的属性,但是在测试程序时,发现只有将user.regionIdSpecified设为 true,regionId才被发送到webservice端。望...
 

   发表时间:2007-08-21  
很高兴能帮到你
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics