首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.money抛出javax.money.MonetaryException: AmountFormatQuery没有MonetaryAmountFormat

javax.money抛出javax.money.MonetaryException: AmountFormatQuery没有MonetaryAmountFormat
EN

Stack Overflow用户
提问于 2018-07-17 16:06:02
回答 0查看 235关注 0票数 0

我有一个使用tomcat8和java8的servlet应用程序,我使用org.javamoney.moneta.Money已经有一段时间了。

今天我想添加一个新的模式,我开始得到以下异常:

代码语言:javascript
复制
javax.money.MonetaryException: No MonetaryAmountFormat for 
AmountFormatQuery AmountFormatQuery (
{pattern=$0.00, Query.formatName=default, 
org.javamoney.moneta.format.CurrencyStyle=NAME, java.util.Locale=en})
at javax.money.spi.MonetaryFormatsSingletonSpi.getAmountFormat(MonetaryFormats
SingletonSpi.java:71) ~[money-api-1.0.3.jar:1.0.3]
at javax.money.format.MonetaryFormats.getAmountFormat(MonetaryFormats.java:112) ~[money-api-1.0.3.jar:1.0.3]
    at au.org.noojee.auditor.util.Formatters.format(Formatters.java:92) ~[classes/:?]
at au.org.noojee.auditor.util.Formatters.format(Formatters.java:81) ~[classes/:?]
at au.org.noojee.auditor.entities.Customer.getNotices(Customer.java:242) ~[classes/:?]
at au.org.noojee.auditor.entities.Customer.getWorstError(Customer.java:307) ~[classes/:?]

因此,我恢复到原始模式,但异常仍在继续。

我已经跟踪了整个代码,问题似乎源于以下对getServices的调用返回了一个空列表。

代码语言:javascript
复制
Bootstrap.getServices(MonetaryAmountFormatProviderSpi.class) 

所以奇怪的是,如果我在同一个项目中设置了一个单元测试,那么一切都很好。

我现在已经升级到money 1.3,但是我得到了同样的错误(单元测试仍然有效)。

失败的代码(在tomcat下运行时)是:

注意:我硬编码了数量,以防传递的money1导致问题(但当然,异常在使用之前就会抛出,所以无论如何都不会是问题)。

代码语言:javascript
复制
public static String format(Money money1, String pattern)
{
    MonetaryAmount money = Money.of(12345.67, "AUD");
    MonetaryAmountFormat customFormat = MonetaryFormats.getAmountFormat(
            AmountFormatQueryBuilder.of(Locale.ENGLISH)
            .set(CurrencyStyle.NAME)
            .set("pattern", "$0.00")
            .build()); 


    String result;
    if (money == null)
        result = "";
    else
        result = customFormat.format(money);
    return result;

}

有效的单元测试是:

代码语言:javascript
复制
static public final CurrencyUnit LOCAL_CURRENCY = Monetary.getCurrency(Locale.getDefault());

@Test
public void test()
{
    MonetaryAmount amount = Money.of(12345.67, "AUD");
    MonetaryAmountFormat customFormat = MonetaryFormats.getAmountFormat(
            AmountFormatQueryBuilder.of(Locale.ENGLISH)
            .set(CurrencyStyle.NAME)
            .set("pattern", "$0.00")
            .build()); 

            String formatted = customFormat.format(amount); //00,01,23,45.67 US Dollar
            System.out.println(formatted);
}

注意:对getCurrency的调用也在tomcat servlet应用程序中,但在不同的类中。我已经运行了包含和不包含该行的单元测试,但没有区别。

我已经检查了我的pom,以防有任何冲突,但它报告moneta 1.3和money-api 1.0.3正在使用中,我相信这是正确的。

我已经重新启动了我的开发环境,以防系统的区域设置出了问题(但无论如何,考虑到单元测试的效果,这是没有意义的)。

任何关于在哪里寻找的提示都将不胜感激。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51376245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档