java – 通过Hessian传输Spring远程传输时,BigDecimal值始终为零

前端之家收集整理的这篇文章主要介绍了java – 通过Hessian传输Spring远程传输时,BigDecimal值始终为零前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

当我通过Spring的Hessian函数调用返回BigDecimal值的远程方法时,它总是返回零.
直接调用方法或使用普通的Hessian servlet(非Spring)正常工作.

可以做些什么来解决这个问题?

服务器端(Tomcat 7)

web.xml中:

远程-servlet.xml中:

调用方法的服务类:

  1. package hr.spi.logic.lcspi.lc302;
  2. @Transactional
  3. @Repository
  4. public class PosloviLogic implements PosloviLogicInterface {
  5. @Override
  6. public BigDecimal test()
  7. {
  8. BigDecimal bd = new BigDecimal("2.2");
  9. return bd;
  10. }
  11. }

客户端

Spring配置 – applicationContextHessian.xml:

  1. factorybean">

控制台应用测试:

  1. public static void main(String[] args) {
  2. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContextHessian.xml");
  3. try {
  4. PosloviLogicInterface posloviLogic = (PosloviLogicInterface) context.getBean("posloviLogic");
  5. BigDecimal bd = posloviLogic.test();
  6. System.out.println(bd); // This returns 0.00
  7. } catch (Exception ex) {
  8. System.out.println(ex.getMessage());
  9. }
  10. }

编辑:
使用的库是Spring 3.2和Hessian 4.0.7

最佳答案
您可以使用HessianServlet.setSerializerFactory()来设置您自己的SerializerFactory并将com.caucho.hessian.io.BigDecimalDeserializer作为BigDecimal的Deserializer返回.

我们像这样修补它,它的工作原理.不知道为什么没有这样实现.

http://www.jarvana.com/jarvana/view/com/caucho/hessian/4.0.7/hessian-4.0.7-src.jar!/com/caucho/hessian/server/HessianServlet.java?format=ok

猜你在找的Spring相关文章