`
Harold_xlp
  • 浏览: 159162 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

发现运行时会报错误, Object is not a primitive:

阅读更多

在开发过程中出现了"发现运行时会报错误, Object is not a primitive: "的异常,开始以为该实体对象没有实现序列化,打开实体看后,发现已经实现了,后来发现是在MQ的配置中,将实体写入到数据库才会出现这个异常,如果不写入到数据库,则不会;配置如下:

<amq:broker useJmx="false" persistent="true">
  <amq:persistenceAdapter>
   <amq:jdbcPersistenceAdapter id="jdbcAdapter"
    dataSource="#dataSource" createTablesOnStartup="true"
    useDatabaseLock="false" />
   <!-- Mysql can setup useDatabaseLock="true",this is defualt HSQLDB,MSSQL
    plz setup useDatabaseLock="false", if u setup useDatabaseLock="true",u will
    catch error: MSSQL Error Info:FOR UPDATE clause allowed only for DECLARE
    CURSOR HSQLDB Error Info:FOR in statement [SELECT * FROM ACTIVEMQ_LOCK FOR
    UPDATE] see http://www.nabble.com/ActiveMQ-JDBC-Persistence-with-SQL-Server-tf2022248.html#a5560296 -->
  </amq:persistenceAdapter>
  <amq:transportConnectors>
   <amq:transportConnector uri="tcp://localhost:0" />
  </amq:transportConnectors>
 </amq:broker>

 

解决方法为:改写MessageConverter类中的实现方法,通过ObjectOutputStream流来进行处理!方法如下:

 

public Message toMessage(Object obj, Session session) throws JMSException {
  // check Type
  if (obj instanceof IPAddressInfo) {
   ActiveMQObjectMessage objMsg = (ActiveMQObjectMessage) session
     .createObjectMessage();
   Map<String, byte[]> map = new HashMap<String, byte[]>();
   byte[] bytes = null;
   ByteArrayOutputStream buf = null;
   ObjectOutputStream o = null;
   try {
    buf = new ByteArrayOutputStream();
    o = new ObjectOutputStream(buf);
    o.writeObject(obj);
    bytes = buf.toByteArray();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } finally {
    if (o != null) {
     try {
      o.flush();
      o.close();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
    if (buf != null) {
     try {
      buf.flush();
      buf.close();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   }
   map.put("Order", bytes);
   objMsg.setObjectProperty("Map", map);
   return objMsg;
  } else {
   throw new JMSException("Object:[" + obj + "] is not Order");
  }

 }

 /*
  * (non-Javadoc)
  *
  * @see
  * org.springframework.jms.support.converter.MessageConverter#fromMessage
  * (javax.jms.Message)
  */
 public Object fromMessage(Message msg) throws JMSException {
  if (msg instanceof ObjectMessage) {
   if (msg != null) {
    Object obj = null;
    byte[] bytes = (byte[]) ((Map) ((ObjectMessage) msg)
      .getObjectProperty("Map")).get("Order");
    ObjectInputStream in = null;
    try {
     in = new ObjectInputStream(new ByteArrayInputStream(bytes));
     obj = in.readObject();
    } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } finally {
     if (in != null) {
      try {
       in.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }
    return obj;
   }
  }
  return msg;
 }

 

分享到:
评论

相关推荐

    is-primitive:typeof值是javascript原语吗?

    $ npm install --save is-primitive 原始值 定义了六种基本类型的数据类型: Boolean Null Undefined Number String Symbol (ECMAScript 6中的新增功能) 用法 var isPrimitive = require ( 'is-primitive' )...

    could not execute

    could not execute:bad executable format(win32 error 193) 下了一个实现MD5的代码,编译时没有错误,但是执行的时候却提示:could not execute:bad executable format(win32 error 193)

    is-boxed-primitive:用于节点的util.types.isBoxedPrimitive()的Polyfillshim

    盒装原语 节点util.isBoxedPrimitive() Polyfill / shim 例子 var isBoxedPrimitive = require ( 'is-boxed-primitive' ) ;... // primitive form is not boxed if ( v != null ) { assert ( isBoxedPr

    boolean-primitive:验证值是否为布尔基元

    var isBoolean = require ( 'validate.io-boolean-primitive' ) ; isBoolean( 值 ) 验证value是否为boolean元。 var value = false ; var bool = isBoolean ( value ) ; // returns true 例子 var isBoolean = ...

    unbox-primitive:取消装箱的JS基本值的装箱

    此模块可以跨领域/ iframe运行,不依赖于instanceof或可变属性,并且可以使用ES6 Symbol.toStringTag进行工作。例子var unboxPrimitive = require ( 'unbox-primitive' ) ;var assert = require ( 'assert' ) ;...

    nan-primitive:验证值是否为 NaN 原语

    $ npm install validate.io-nan-primitive 要在浏览器中使用,请使用 。 用法 var isnan = require ( 'validate.io-nan-primitive' ) ; isnan( 值 ) 验证value是否为NaN原语。 var value = NaN ; var bool = ...

    positive-primitive:验证值是否为正数原语

    var isPositive = require ( 'validate.io-positive-primitive' ) ; isPositive(value) 验证value是否为正number原语。 var value = Math . PI ; var bool = isPositive ( value ) ; // returns true 例子 ...

    integer-primitive:验证值是否是数字原语和整数

    用法 var isInteger = require ( 'validate.io-integer-primitive' ) ;isInteger( 值 ) 验证值是否是number原语,不包括NaN和integer 。 var bool = isInteger ( 3 ) ;// returns true例子 var isInteger = require ...

    react-wizard-primitive:一个react向导原语-用钩子构建!

    向导/步进器的零依赖支架,没有任何UI限制。 钩子和渲染道具API可用!将向导拆分为多个组件建立自己的抽象原料药Step useWizard 例子useWizardStep 例子... 快速开始安装react-wizard-primitive npm i react-wizard-pr

    Javascript.Object.Oriented.Programming.pdf

    Build sophisticated web applications by mastering the art of Object-Oriented Javascript About This Book Learn popular Object-Oriented programming (OOP) principles and design patterns to build robust ...

    Java英文单词汇总.doc

    * primitive:原型 * reference:引用 * info:信息 * insert:插入 * island:岛 * compare:比较 * ignore:忽略 * triangle:三角 * invert:反转 * diamond:钻石 * password:密码 其他 * document:文件 * ...

    Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#&amp;lt;Object&amp;gt;‘的解决

    总结来说,当遇到`Uncaught TypeError: Cannot assign to read only property 'exports' of object '#&lt;Object&gt;'`的错误时,首先要检查是否有在同一个文件中混合使用`import/export`和`require/module.exports`的情况...

    nodejs-primitive:https的Node.js端口

    nodejs-primitive 这是应用程序的nodejs端口,最初由Michael Fogleman创建(用go编写)。 其目的是复制带有几何图元的图像。 此实现比原始实现慢,但足够快以致可以使用。 这个怎么运作 您可以在原始go app的中找到...

    primitive:验证值是否为 JavaScript 原语

    $ npm install validate.io-primitive 要在浏览器中使用,请使用 。 用法 var isPrimitive = require ( 'validate.io-primitive' ) ; isPrimitive(值) 验证value是否为 JavaScript 原语。 var value = true ; ...

    glo-demo-primitive:使用glo模块的快速网格查看器

    用法 var geom = require ( 'primitive-sphere' ) ( )var viewer = require ( 'glo-demo-primitive' )viewer ( geom , { texture : true , // add a simple repeating pattern repeat : [ 8 , 8 ] // UV repeats} ) ...

    XPE组件及相关问题解决方法

    XPe组件总结 XPE中数据库组件及其描述如下: 序号 组件名称 功能描述 ...8 Primitive: Odbc32 ODBC核心组件 9 Primitive: Odbcint ODBC组件 XPE中EWF组件及其描述如下: 序号 组件名称 功能描述

    Proteus:Simulation is not running in real time解决方法

    在使用Proteus进行单片机仿真的过程中,有时可能会遇到“Simulation is not running in real time due to excessive CPU load”的提示,这意味着仿真无法实时运行,主要是由于CPU负载过重导致的。这个问题对于开发者...

    Laravel开发-primitive

    在Laravel框架中进行开发时,理解PHP的原始(primitive)数据类型是非常基础且重要的。这些类型构成了所有复杂数据结构的基础,对它们的熟练掌握能帮助开发者更好地编写高效、清晰的代码。本教程将深入探讨PHP中的...

    alias_primitive:半小时内创建的简单别名游戏。 允许使用两个设备的两个用户用自己的话和游戏时长玩游戏

    2. **DOM操作**:游戏界面的动态更新通常通过操作Document Object Model (DOM) 实现,JavaScript 可以轻松添加、修改或删除页面元素。 3. **数据存储与交换**:为了实现两个设备间的通信,可能需要利用AJAX或者...

Global site tag (gtag.js) - Google Analytics