异常org.omg.CORBA.BAD_PARAM ()解决方法猜想

小声bb:这个是在我写一个corba博客的时候偶然发现的,百度后发现不少人遇到这个错误而且还有些没有被解决,由于我没有实际遇到这个问题,所以此处只是对这个错误及解决方法的一些分析猜想,希望能对你有所帮助。如果有错请不要骂我quq


这个错误是在idl文件下生成的包中的一个文件的函数内被抛出。

我的idl文件是这样的

module sample{
interface HelloWorld{ 
wstring sayHello();   
};  
};

在它生成的sample包中有一个HelloWorldHelper.java文件(文件的所有代码请见最后),里面有一个narrow(),具体内容如下:

public static sample.HelloWorld narrow (org.omg.CORBA.Object obj)
  {
    if (obj == null)
      return null;
    else if (obj instanceof sample.HelloWorld)
      return (sample.HelloWorld)obj;
    else if (!obj._is_a (id ()))
      throw new org.omg.CORBA.BAD_PARAM ();
    else
    {
      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
      sample._HelloWorldStub stub = new sample._HelloWorldStub ();
      stub._set_delegate(delegate);
      return stub;
    }
  }

在第二个else if中,判断如果(!obj._is_a (id ()))则抛出这个org.omg.CORBA.BAD_PARAM ()异常,而id()这个函数也是在HelloWorldHelper.java中被定义的

id()的内容是

public static String id ()
  {
    return _id;
  }

而_id是在HelloWorldHelper.java中一开始被定义的

  private static String  _id = "IDL:sample/HelloWorld:1.0";//IDL:接口数字语言

所以这个异常的错误原因可能是生成id失败或者为空。

同时我在stackflow上看到有人也遇到了这个问题,https://stackoverflow.com/questions/28851733/apache-camel-update-route-through-jmx-throws-org-omg-corba-bad-param,他是在博客的服务器端更新时遇到的这个问题,回答的那个人说他是在本地跑的就没有报这个错(不失为一种解决办法?/发抖),他说在本地跑Camel就会抛出一个异常,但是不能再客户端加载。异常为

Caused by: java.lang.ClassNotFoundException: org.apache.camel.FailedToCreateRouteException (no security manager: RMI class loader disabled)

以下是HelloWorldHelper.java的源代码

package sample;


/**
* sample/HelloWorldHelper.java .
* 由IDL-to-Java 编译器 (可移植), 版本 "3.2"生成
* 从HelloWorld.idl
* 2019年5月25日 星期六 上午10时02分35秒 CST
*/

abstract public class HelloWorldHelper
{
  private static String  _id = "IDL:sample/HelloWorld:1.0";

  public static void insert (org.omg.CORBA.Any a, sample.HelloWorld that)
  {
    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
    a.type (type ());
    write (out, that);
    a.read_value (out.create_input_stream (), type ());
  }

  public static sample.HelloWorld extract (org.omg.CORBA.Any a)
  {
    return read (a.create_input_stream ());
  }

  private static org.omg.CORBA.TypeCode __typeCode = null;
  synchronized public static org.omg.CORBA.TypeCode type ()
  {
    if (__typeCode == null)
    {
      __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (sample.HelloWorldHelper.id (), "HelloWorld");
    }
    return __typeCode;
  }

  public static String id ()
  {
    return _id;
  }

  public static sample.HelloWorld read (org.omg.CORBA.portable.InputStream istream)
  {
    return narrow (istream.read_Object (_HelloWorldStub.class));
  }

  public static void write (org.omg.CORBA.portable.OutputStream ostream, sample.HelloWorld value)
  {
    ostream.write_Object ((org.omg.CORBA.Object) value);
  }

  public static sample.HelloWorld narrow (org.omg.CORBA.Object obj)
  {
    if (obj == null)
      return null;
    else if (obj instanceof sample.HelloWorld)
      return (sample.HelloWorld)obj;
    else if (!obj._is_a (id ()))
      throw new org.omg.CORBA.BAD_PARAM ();
    else
    {
      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
      sample._HelloWorldStub stub = new sample._HelloWorldStub ();
      stub._set_delegate(delegate);
      return stub;
    }
  }

  public static sample.HelloWorld unchecked_narrow (org.omg.CORBA.Object obj)
  {
    if (obj == null)
      return null;
    else if (obj instanceof sample.HelloWorld)
      return (sample.HelloWorld)obj;
    else
    {
      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
      sample._HelloWorldStub stub = new sample._HelloWorldStub ();
      stub._set_delegate(delegate);
      return stub;
    }
  }

}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值