微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

服务器端(Tomcat 7)

web.xml中:

dispatcherServletservlet-mapping>
        servlet-mapping>

远程-servlet.xml中:

fig />
    oslovi" class="org.springframework.remoting.caucho.HessianServiceExporter">
        osloviLogic" />
        osloviLogicInterface" />
    

调用方法的服务类:

package hr.spi.logic.lcspi.lc302;

@Transactional
@Repository
public class PosloviLogic implements PosloviLogicInterface {
    @Override
    public BigDecimal test()
    {
        BigDecimal bd = new BigDecimal("2.2"); 
        return bd;      
    }
}

客户端

Spring配置 – applicationContextHessian.xml:

osloviLogic" class="org.springframework.remoting.caucho.HessianProxyfactorybean">
        oslovi" />
        osloviLogicInterface" />
    

控制台应用测试:

public static void main(String[] args) {
    ApplicationContext context = new ClasspathXmlApplicationContext("applicationContextHessian.xml");
    try {
        PosloviLogicInterface posloviLogic = (PosloviLogicInterface) context.getBean("posloviLogic");

        BigDecimal bd = posloviLogic.test();
        System.out.println(bd); // This returns 0.00

    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

编辑:
使用的库是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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐