当我通过Spring的Hessian函数调用返回BigDecimal值的远程方法时,它总是返回零.
直接调用方法或使用普通的Hessian servlet(非Spring)正常工作.
可以做些什么来解决这个问题?
服务器端(Tomcat 7)
web.xml中:
远程-servlet.xml中:
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:
factorybean">
控制台应用测试:
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返回.
我们像这样修补它,它的工作原理.不知道为什么没有这样实现.