当前位置: 首页 > news >正文

4大门户网站物流网站建设流程图

4大门户网站,物流网站建设流程图,关于免费制作网页的网站,黑帽seo培训大神1、前因 今天在生产环境启用了某个功能,结果发现有个文件上传华为云OBS失败了,报错如下: Caused by: java.lang.IllegalArgumentException: 不支持:http://javax.xml.XMLConstants/property/accessExternalDTDat org.apache.xal…

1、前因

今天在生产环境启用了某个功能,结果发现有个文件上传华为云OBS失败了,报错如下:

Caused by: java.lang.IllegalArgumentException: 不支持:http://javax.xml.XMLConstants/property/accessExternalDTDat org.apache.xalan.processor.TransformerFactoryImpl.setAttribute(TransformerFactoryImpl.java:576) ~[xalan-2.7.1.jar:?]at com.obs.services.internal.xml.OBSXMLBuilder.asString(OBSXMLBuilder.java:306) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]at com.obs.services.internal.V2Convertor.transCompleteMultipartUpload(V2Convertor.java:96) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]at com.obs.services.internal.service.ObsMultipartObjectService.completeMultipartUploadImpl(ObsMultipartObjectService.java:96) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]at com.obs.services.AbstractMultipartObjectClient.access$400(AbstractMultipartObjectClient.java:39) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]at com.obs.services.AbstractMultipartObjectClient$5.action(AbstractMultipartObjectClient.java:185) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]at com.obs.services.AbstractMultipartObjectClient$5.action(AbstractMultipartObjectClient.java:182) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]at com.obs.services.AbstractClient.doActionWithResult(AbstractClient.java:388) ~[esdk-obs-java-bundle-3.23.9.1.jar:?]... 50 more

2、BUG定位

首先看抛异常的第一条信息,org.apache.xalan.processor.TransformerFactoryImpl,这个类首先看名称,后面带了Impl,一般来说应该是某个接口的实现类,因为这个是引用的jar包里报的错,还是apache的jar包,一般来说不太可能是apache代码写错了,所以很有可能是我们调这个接口的时候,调错实现类了,实际上不应该调apache的这个实现类。

直接来看调用方com.obs.services.internal.xml.OBSXMLBuilder的asString方法:

public String asString() throws TransformerException {TransformerFactory tf = TransformerFactory.newInstance();tf.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD", "");tf.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet", "");Transformer transformer = tf.newTransformer();transformer.setOutputProperty("omit-xml-declaration", "yes");StringWriter writer = new StringWriter();transformer.transform(new DOMSource(this.getDocument()), new StreamResult(writer));return writer.getBuffer().toString().replaceAll("|\r", "");
}

代码里的TransformerFactory是个抽象类,整个方法中也没有指定使用到底用哪个实现类,这个时候就应该想到Java的SPI机制了,打开org.apache.xalan.processor.TransformerFactoryImpl所在Jar包,Jar包里有个文件夹META-INF,里面有个services的文件夹,这里面的文件,就指定了程序会使用TransformerFactory的哪个实现类,如下图:
在这里插入图片描述
打开该文件,文件内容如下:

org.apache.xalan.processor.TransformerFactoryImpl

由于我们的程序里没有相应的SPI配置,所以程序会优先使用org.apache.xalan.processor.TransformerFactoryImpl类

3、BUG修复

知道了问题所在,接下来就是要找到那个正确的类,我们进到TransformerFactory这个类里,由于我用的是IDEA,点类边上的蓝色按钮就可以找到这个类的子类,如下图:
在这里插入图片描述
可以看到同样叫TransformerFactoryImpl名字的,还有com.sun.org.apache.xalan.internal.xsltc.trax包下的类,然后我们就在项目的META-INF的目录下新增services目录(如果没有的话),在该目录下新增文件javax.xml.transform.TransformerFactory,如图:
在这里插入图片描述
文件内容如下:

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

再启动服务时,服务就正常了

4、疑惑

眼尖的小伙伴可能会发现,我这个异常是在生产环境抛出来的,难道我之前测试环境没测出来这个问题吗,是的,测试环境当时测的时候没有指定实现类也没有报错,文件也正常上传到了华为云OBS上,但是这个问题发生后,再在测试环境就没法复现这个问题了,所以也没有再深究。


找到问题了,我们在引入OBS的jar包时是这样写的:

<dependency><groupId>com.huaweicloud</groupId><artifactId>esdk-obs-java-bundle</artifactId><version>[3.21.8,)</version>
</dependency>

这种写法会导致使用最新版本的jar包,来看jar包的发布时间:
在这里插入图片描述
我们测试的时候大概是在十月份,十一月、十二月都有过发布,功能启用时间更是在后面,所以我们测试的jar跟生产的jar实际上版本是不一样的,生产是3.23.9.1,而测试是3.23.9,我们将版本指定为3.23.9后查看com.obs.services.internal.xml.OBSXMLBuilder源码,里面并没有使用抽象类TransformerFactory,所以也不会有上面所说的问题。

http://www.yayakq.cn/news/881245/

相关文章:

  • 青岛做网站方案莱芜市在线论坛话题
  • 信息网站开发国外门户网站设计
  • 行业网站建设内容开封网站建设培训
  • 网站开发PHP留言本电子版实验作品新加坡网络公司排名
  • 网站设计制作平台哪个好百度关键词优化平台
  • 无锡手机网站建设介绍常见的网络营销方式
  • 网站平台搭建国内做贵金属返佣比较多的网站
  • 上海建筑建材业网站迁移js检测网站是否能打开
  • 机械网站建设公司网页制作网站源码
  • 建一个网站需要哪些知识旅游网站怎样做宣传
  • 想做水果外卖怎么做网站简述sem对seo的影响
  • 怎么做加盟美容院网站为什么我有的网站打不开
  • 晋江做任务的网站wordpress建站更换图片
  • wordpress调用文章方法广州网站优化方式
  • wordpress 站群会员江西网络推广
  • 红色大气网络公司企业网站源码_适合广告设计网站建设项目的工作分解
  • 网乐科技网站建设vue做电商网站
  • 凡科建设网站步骤网站内容被攻击该怎么做
  • 吉林北京网站建设大型社区网站开发文档
  • 江西数据平台网站建设低调与华丽wordpress
  • 誉重网站建设脚上起小水泡很痒是什么原因
  • 自己做盗号网站wordpress用什么服务
  • 如何建立企业网站或者官网网站备案 收费
  • 做网站可以设账户吗建筑工地招工招聘信息平台
  • 做网站哪一家比较好深圳公交公司官网
  • 如何入侵网站后台蓝田微网站建设
  • 化工产品网站建设谷歌关键词排名查询工具
  • 域名做违法网站seo排名工具有哪些
  • 网站建设需要php吗佛山营销型建设网站
  • 做暧暖ox网站腾讯云提供网站建设吗