public class PublishService
extends Service
{
@Value("${vnpt.url}")
private static String vnptUrl;
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL(vnptUrl+"?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
PUBLISHSERVICE_WSDL_LOCATION = url;
PUBLISHSERVICE_EXCEPTION = e;
}
.....以下代码省略
报错信息
javax.xml.ws.WebServiceException: java.net.MalformedURLException: no protocol: null?wsdl
at com.haier.cosmo.wms.cp.out.service.service.printInvoiceService.PublishService.<clinit>(PublishService.java:34)
at com.haier.cosmo.wms.cp.out.service.service.impl.sto.FgStoServiceImpl.printVNPT(FgStoServiceImpl.java:177)
yml配置
# vnpt
vnpt:
url: https://aquavn-tt78admindemo.vnpt-invoice.com.vn/PublishService.asmx
问题出在这个地方:private static String vnptUrl;。静态变量没办法直接通过@Value注入。
你要先删除static关键字,让vnptUrl成为一个普通的实例变量。然后,PublishService类要是一个 Spring 管理的 Bean,方便 Spring 可以注入配置的值。
如果你要vnptUrl是一个静态变量,你可以这样写:
这样,Spring 就能正确地注入vnptUrl的值了。