• 解决javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V异常


    异常:

    java.lang.AbstractMethodError:javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)
    
    • 1

    在这里插入图片描述
    可能原因:
    在本地WINDOWS编译测试没问题,只在LINUX服务器上面有这个问题,查了很久估计是服务器上面不同jar包的多xml解析器冲突

    不同jar包的多xml解析器冲突

    排查项目是否存在如下( 也可能是其他包)关于xm的jar包

    xerces.jar
    xercesImpl.jar
    
    • 1
    • 2

    解决

    方法一:项目中去除xercesl依赖
    方法二:项目启动, 启动项目发现了这个报错,试了很多方式,最终用下面这种方式解决了

    public  void pdfToWaterMarkAndCPPDF(String infilePath,String outFilePath,String picPath,String bgPicPath) {
        	try{
        		System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
    	    	PdfReader reader = new PdfReader(infilePath);//选择需要印章的pdf
    	        PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outFilePath));//加完印章后的pdf
    	
    	        Rectangle pageSize = reader.getPageSize(1);//获得第一页
    	        float height = pageSize.getHeight();
    	        float width  = pageSize.getWidth();
    	
    	        int nums = reader.getNumberOfPages();
    	        Image[] nImage =  subImages(picPath,nums);//生成骑缝章切割图片
    	
    	        Image image = Image.getInstance(bgPicPath);
    	        for(int n=1;n<=nums;n++){
    	            PdfContentByte over = stamp.getOverContent(n);//设置在第几页打印印章
    	            Image img = nImage[n-1];//选择图片
    	            img.setAlignment(1);
    	            over.beginText();
    	    		// 设置水印透明度
    	    		PdfGState gs = new PdfGState();
    	    		// 设置笔触字体不透明度为0.4f
    	    		gs.setFillOpacity(0.6f);
    	            image.setAbsolutePosition(0, 0);
    	            image.scaleAbsolute(width-10,height-10);//控制图片大小
    				// 设置透明度
    				over.setGState(gs);
    				// 添加水印图片
    				over.addImage(image);
    				img.scaleAbsolute(120/nums,52);//控制图片大小
    	            img.setAbsolutePosition(width-img.getWidth()-10,height/2-img.getHeight()/2);//控制图片位置
    	            over.addImage(img);
    	           
    				//结束设置
    				over.endText();
    				over.stroke();
    	        }
    	        stamp.close();
    	        reader.close();
        	} catch (Exception e) {
    	         e.printStackTrace();
    	      }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    解决办法:在代码前面加上如下代码

    System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
    
    • 1

    其他

    java.lang.ClassCastException:
    weblogic.xml.jaxp.RegistryDocumentBuilderFactory cannot be cast to
    javax.xml.parsers.DocumentBuilderFactory
    则是因为xml-apis.jar和stax-api-1.0.1.jar这个jar包导致的。
    tomcat中不带此jar包,而weblogic带,所以就出现jar包冲突了,解决办法就是把程序中的此jar包给删掉啦。
    ———————————————— 版权声明:本文为CSDN博主「wh_week8」的原创文章,遵循CC 4.0
    BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:
    https://blog.csdn.net/u014505277/article/details/51858940
    https://blog.csdn.net/huwise/article/details/109668173

  • 相关阅读:
    jstat和jmap打印堆栈排查内存泄漏
    【Python性能优化】list、array与set
    咪唑基离子液体EMIM[PF6],EMIM[BF4],EMIM[Tf2N],BMIM[PF6],HMIM[PF6],[VBMIM][PF6]改性水性聚氨酯
    一个基于.Net Core、Vue开发仿掘金的CMS开源系统
    带你深入了解屏幕刷新机制
    实习day1
    Node.js躬行记(23)——Worker threads
    [vmware to openstack] 安装virtio驱动
    【程序填空】单链表类定义 C++
    如何使用PySide2将designer设计的ui文件加载到Python类上鼠标拖拽显示路径
  • 原文地址:https://blog.csdn.net/qq_39900031/article/details/127935409