我试图在静态块内调用URL检索方法,bean的实例化失败;嵌套的异常是java.lang.ExceptionInInitializerError。
我正在尝试从配置文件中获取WSDL URL。此配置数据存储在数据库中。
static
{
URL url = null;
WebServiceException e = null;
try
{
url = getVertexConfiguration();
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
}
private static URL getVertexConfiguration() throws MalformedURLException
{
try {
configuration = configurationDAO.getByRefName("tax/vertex",
SecureSession.getUser().getDataDomain() != null ?
SecureSession.getUser().getDataDomain() : "app.cantata");
} catch (B2BTransactionFailed b2BTransactionFailed) {
}
Map<String, DynamicAttribute> vertexTaxConfig = configuration.getConfigs();
vertexWsdlUrl = vertexTaxConfig.get("vertexWsdlUrl").getValue().toString();
return new URL(vertexWsdlUrl);
}
}
我正在获取静态块,bean的实例化失败;嵌套的异常是java.lang.ExceptionInInitializerError。
答案 0 :(得分:0)
您为什么还要尝试这个?我认为您尝试访问protected function schedule(Schedule $schedule){
$schedule->command('ticket:completion')
->hourly();
}
的那一刻甚至还没有初始化。
正如我们在评论中讨论的那样,我绝对会建议您,作者,正确注入您的依赖项,例如:
configurationDAO
或者您甚至可以在构造函数中初始化@Service
public class ConfigurationService {
private final ConfigurationDao configurationDao;
private URL url;
public ConfigurationService(ConfigurationDao configurationDao) {
this.configurationDao = configurationDao;
}
@PostConstruct
private void init() {
// your stuff here
}
}
:
url
答案 1 :(得分:0)
根本原因是,静态块是在设置为类级别初始化时(甚至在构造函数调用之前)的最早步骤。也就是说,您对静态块的依赖,例如configurationDAO
尚未初始化。您不应该为此使用static。相反,您应该使其成为普通的Instance方法。
答案 2 :(得分:-1)
如果静态初始值设定项块中存在某些错误,则会得到ExceptioninInitializerBlock。您只能处理MalformedURLException
,但是可能还有其他人。
您应该为所有例外添加另一个catch
,然后查看在那里发生的情况。
static {
URL url = null;
WebServiceException e = null;
try {
url = getVertexConfiguration();
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
} catch (Exception e) {
//real problem
}
}
答案 3 :(得分:-1)
该异常是运行静态初始化程序时发生的错误的中继机制。异常应该有一个原因,它将描述实际错误。根据上面的描述,看起来有三层异常:来自bean初始化的错误报告,ExceptionInInitializer
异常,然后是ExceptionInInitializer
异常的原因。 应该显示异常处理,但可能不会显示所有三层,这将使发现基本异常更加困难。
来自ExceptionInInitializer javaDoc:
* Signals that an unexpected exception has occurred in a static initializer.
* An <code>ExceptionInInitializerError</code> is thrown to indicate that an
* exception occurred during evaluation of a static initializer or the
* initializer for a static variable.
作为备用,您可以在getVertexConfiguration
的{{1}}内放入try-catch,然后将catch块打印出来:
Throwable