我有一个使用tomcat8和java8的servlet应用程序,我使用org.javamoney.moneta.Money已经有一段时间了。
今天我想添加一个新的模式,我开始得到以下异常:
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的调用返回了一个空列表。
Bootstrap.getServices(MonetaryAmountFormatProviderSpi.class) 所以奇怪的是,如果我在同一个项目中设置了一个单元测试,那么一切都很好。
我现在已经升级到money 1.3,但是我得到了同样的错误(单元测试仍然有效)。
失败的代码(在tomcat下运行时)是:
注意:我硬编码了数量,以防传递的money1导致问题(但当然,异常在使用之前就会抛出,所以无论如何都不会是问题)。
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;
}有效的单元测试是:
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正在使用中,我相信这是正确的。
我已经重新启动了我的开发环境,以防系统的区域设置出了问题(但无论如何,考虑到单元测试的效果,这是没有意义的)。
任何关于在哪里寻找的提示都将不胜感激。
https://stackoverflow.com/questions/51376245
复制相似问题