跟贴请点击 http://www.huihoo.com/cgi-bin/forum/viewthread.php?tid=1260
作者 | 文章标题 struct问题,救命 | |
新手上路 贴子数量 : 17 注册日期 : 6/8/2002 在线情况 : 离线 |
发表于: 8/19/2002 - 02:56 | |
一个idl
module test { struct client { string id; string name; }; interface clientmanager { void request(in client x); }; }; 客户端程序,如果new client(),id,name都赋值的情况下测试通过。 但是,如果name不赋值,报错。org.omg.CORBA.BAD_PARAM: minor code: 1 completed: Maybe 察看以下出错的堆栈,出错在clienthelper.java的write()方法, at 。。。CDROutputStream.write_string(CDROutputStream.ja ompiled Code) at test.clientHelper.write(clientHelper.java) at test.ClientHelper.insert(ClientHelper.java) 察看以下CDROutputStream中, public final void write_string (final String s) { if( s == null ) { throw new org.omg.CORBA.MARSHAL("Null References"); } 。。。 难道,struct member都必须赋值吗? | ||
版主 贴子数量 : 198 注册日期 : 11/16/2001 在线情况 : 离线 |
发表于: 8/19/2002 - 05:17 | |
关于这个问题的讨论:
2002-08-19 12:03:22 谢谢 问一个问题, idl中,struct作为方法的参数,难道客户调用时都必须给struct的每一个成员赋值吗? 1999-08-19 12:05:39 LifeCycle I think so ... stevenWu? (通过服务器中转) 2002-08-19 12:08:24 J yeah 谢谢你对poa和servat locator的回答。 我以前用boa做过程序,poa这些还有些不清楚 2002-08-19 12:13:33 StevenWu struct作参数那个问题,我想不那么简单 你想,如果 struct 是个out型或者inout型的参数,member肯定不需用客户端赋值。 这个问题困惑了我好2天。 1999-08-19 12:44:28 LifeCycle 变长struct的in的传递原型是const struct& 而out和inout则是struct& (通过服务器中转) 2002-08-19 12:48:02 StevenWu 但struct marshall 时,member为空报错是什么原因呢? c++的helper类,你知道它的write方法是怎么写的?遇到null时怎么处理? 1999-08-19 12:58:58 LifeCycle 我一般都 是给个初始值。 (通过服务器中转) 2002-08-19 13:00:09 StevenWu 可是你做应用的时候,并不是要求所有的字段都必填啊。 1999-08-19 13:02:24 LifeCycle 我是参照Orbix2k的例子typetest来做的。 看来我需要做进一步测试。 (通过服务器中转) 2002-08-19 13:03:31 StevenWu orbix2k的例子 如果struct不全赋值,客户端程序报错? 1999-08-19 13:03:59 LifeCycle 你试试? (通过服务器中转) 1999-08-19 13:07:44 LifeCycle tuexdo ???里面的corba全吗? 你可以试试Orbix2k. (通过服务器中转) 2002-08-19 13:08:57 StevenWu 哦 你是orbix公司的? 我回头想看看orbix,听说是最好的corba产品了,和规范走的很近 | ||
版主 贴子数量 : 264 注册日期 : 10/28/2001 在线情况 : 离线 |
发表于: 8/19/2002 - 06:50 | |
2002-08-19 13:37:33 stevenWu
谢谢 问一个问题, idl中,struct作为方法的参数,难道客户调用时都必须给struct的每一个成员赋值吗? 2002-08-19 13:36:06 mep 具体可能需要查一下规范看看IDL映射到C++或java时的语义。 如果赋值会有问题吗? (通过服务器中转) 2002-08-19 13:41:33 stevenWu 不是,我要给作参数的每一个struct member赋值,这样,方法调用时 才能正确的marshall,否则,老报错。 2002-08-19 13:40:09 mep 如果marshal时要求每个成员不为空(in参数),那么你就给他赋值好了(既然你的原意为空,说明你不需使用它,那么可以赋给它任意一个字符串) (通过服务器中转) 2002-08-19 13:45:42 stevenWu 可是,我想知道到底是不是这样的? 而且,我用out参数的时候,同样的问题,必须给个无用的值,才能marshal通过? 2002-08-19 13:43:30 mep 如果是out或inout类型,可以使用对应var类型来接收返回值。 (通过服务器中转) 2002-08-19 13:49:12 stevenWu java中是holder类来接收,但是holder类同样要求struct member不能为空,才能marshall? 2002-08-19 13:46:46 mep 让我查查看 (通过服务器中转) 2002-08-19 13:52:17 stevenWu 谢谢mep 2002-08-19 14:05:11 mep 可不可以把完整的出错堆栈给我看看 (通过服务器中转) 2002-08-19 14:09:13 stevenWu ok 2002-08-19 14:10:40 stevenWu org.omg.CORBA.BAD_PARAM: minor code: 1 completed: Maybe at com.beasys.CORBA.iiop.CDROutputStream.write_string(CDROutputStream.java, Compiled Code) at cn.sztelecom.CDMA.core.IDL.ClientInfoHelper.write(ClientInfoHelper.java:20) at cn.sztelecom.CDMA.core.IDL.ClientInfoHelper.insert(ClientInfoHelper.java:47) at cn.sztelecom.CDMA.core.IDL._ClientStub.update(_Clien 2002-08-19 14:14:31 stevenWu http://java-house.jp/ml/archive/j-h-b/035700.html 同样的问题,不过是日文,我看不懂 2002-08-19 14:11:12 mep 我不太明白为什么in参数要在outputstream中marshal。 堆栈信息不全,再外部的堆栈信息? (通过服务器中转) 2002-08-19 14:15:24 stevenWu 这是个inout参数 2002-08-19 14:17:44 stevenWu 如果我给struct member全赋值,就好了,没有错误,调用完成 2002-08-19 14:16:41 mep 喔,怪不得。 喔正在查看规范,看看是否允许返回空的out或inout参数 (通过服务器中转) 2002-08-19 14:21:39 stevenWu 即使不允许,为什么全赋值就好了? 2002-08-19 14:18:20 mep 全赋值的意思是每个都是NULL吗? (通过服务器中转) 2002-08-19 14:22:36 stevenWu 都不空 2002-08-19 14:21:55 mep 是啊, ORB会检查out或inout参数中的string类型是否为NULL, 如果是,就会抛出BAD_PARAM异常。 所以再marshal client类型时,它marshal它的每个成员并检查是否为空。 不过这个说法我还没有从规范中找到出处 (通过服务器中转) 2002-08-19 14:27:30 mep 好像是这样: 在某些语言中,string没有NULL值,因此,out或inout中的string中NULL会引发异常。在IDL中,NULL只能赋值个对象引用。 所以你还是必须把它的每个成员都赋非空的值 (通过服务器中转) 2002-08-19 14:32:37 stevenWu 不对, 你是指方法返回后,out参数不能为null? 可是,这是在marshal的时候啊,out参数应当可以为null.out参数既然定义为接收返回值的,marshak前,参数应当可以为空吧。 2002-08-19 14:31:38 mep 问题是有些语言中没有NULL值(除了对象引用,是否还有value?) ojbect reference的out或inout类型可以赋NULL。其他的类型不行 (通过服务器中转) 2002-08-19 14:42:59 stevenWu 我明白你的意思。 而且,即使参数为in,出错信息是一样的。 我看了helper类,marshal的时候就是在OutputStream中。 2002-08-19 14:42:39 mep (通过服务器中转) | ||
新手上路 贴子数量 : 3 注册日期 : 8/22/2002 在线情况 : 离线 |
发表于: 8/22/2002 - 01:18 | |
我知道visibroker 4。51for java中,string是必须赋值的,而且如果传输汉子,则必须转换。 ____________________ 我渴望一个美丽的女孩,美丽如一杯绿茶; 我渴望一段隽永的爱情,隽永仅此一世; 我相信我会有幸福的生活,正如我相信会有同样幸福的女孩——幸福因你而开始 ,幸福因你而终生; 我不是个一定要有什么大志的男孩,我只希望我的人生能实现这样一种一直让我 感动的境界—— 携子之手,与子同老! | ||
COPYRIGHT © 2001-2002 huihoo.com E-mail:webmaster@huihoo.com |