maven jar包冲突导致java mail报空指针异常问题的解决过程

简介:

   目前手头在做一个采用邮件回复的方式对工作流进行审批的项目。之前一篇博文对思路做了简单描述。项目开发完成在本地进行测试的时候完成没有问题。但在进入待发布环境交测试组测试时,却一直报错。远程调试发现如下代码报空指针异常:

1
2
3
4
5
   try {
             IMAPStore store = (IMAPStore) session.getStore( "imap" );  // 使用imap会话机制,连接服务器  
             store.connect(user, password);  
             IMAPFolder folder = (IMAPFolder) store.getFolder( "INBOX" );  // 收件箱  error
             folder.open(Folder.READ_WRITE);

   标记error的行报空指针,打印异常栈:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Exception in thread "main" java.lang.NullPointerException
at javax.mail.internet.ParameterList.set(ParameterList.java:165)
at com.sun.mail.imap.protocol.BODYSTRUCTURE.parseParameters(BODYSTRUCTURE.java:404)
at com.sun.mail.imap.protocol.BODYSTRUCTURE.< init >(BODYSTRUCTURE.java:224)
at com.sun.mail.imap.protocol.BODYSTRUCTURE.< init >(BODYSTRUCTURE.java:109)
at com.sun.mail.imap.protocol.FetchResponse.parse(FetchResponse.java:158)
at com.sun.mail.imap.protocol.FetchResponse.< init >(FetchResponse.java:67)
at com.sun.mail.imap.protocol.IMAPResponse.readResponse(IMAPResponse.java:136)
at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:270)
at com.sun.mail.iap.Protocol.command(Protocol.java:313)
at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:1529)
at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:1521)
at com.sun.mail.imap.protocol.IMAPProtocol.fetchBodyStructure(IMAPProtocol.java:1221)
at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1307)
at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:623)
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927)
at a.Email3.main(Email3.java:71)

   反复远程和本地调试,未发现问题。

   网上对相关错误进行搜索,发现有几例相似:

tomcat使用javamail发送邮件失败解决办法

javamail报空指针异常

javaMail在Tomcat下收取邮件时报空指针错误;Jetty和mian运行正常

    针对几种思路,包括缺失jar包和代码不严谨或lib包冲突均作了尝试,未有效解决

    因怀疑lib包冲突可能性更大,在本地main进行测试,正常通过。将tomcat下所有lib全部导入本地test依赖,发现报错,巡查lib包,发现有geronimo-javamail_1.4_spec-1.3.jar包,嫌疑较大。删除该包,代码正常。由此,基本可判定系该包与javamail发生冲突,可能有同名class被先加载。

网上有对该冲突的解决方法的描述:

geronimo-javamail_1.4_spec-1.3.jar与mail.jar 冲突解决办法

   方法简单明了,即删除冲突的jar包。因本项目的管理使用maven,如不将根本问题解决,只删除jar包是徒劳的。所以以下尝试从根本上将依赖冲突解决。

   IDE中pom.xml全文检索该包,未发现有项目的直接依赖。因maven存在传递依赖,所以可判定是由项目的间接依赖导致。通过maven命令查看依赖树,方法如下:

        选中项目,右键->run as ,选择maven build ...,然后在对话框中的Goals项填入" dependency:tree",再在"debug output"打上勾,并将此项启动的名字改为"showDependency-tree",然后点击“Debug"/Run按钮, console里面会很详细地显示每个pom里面配置的依赖它们会带来哪些jar文件。

   因output巨长,下面仅作节选:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
[INFO] com.fx.oa:per-evaluation:jar:0.0.1-SNAPSHOT
[INFO] +- com.fx.fxplatform:fxplatform-shared:jar:1.0.0-SNAPSHOT:compile
[INFO] |  +- org.springframework:spring-beans:jar:3.1.2.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-core:jar:3.1.2.RELEASE:compile
[INFO] |  +- org.springframework:spring-web:jar:3.1.2.RELEASE:compile
[INFO] |  |  +- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  |  \- org.springframework:spring-context:jar:3.1.2.RELEASE:compile
[INFO] |  |     \- org.springframework:spring-aop:jar:3.1.2.RELEASE:compile
[INFO] |  +- org.springframework:spring-webmvc:jar:3.1.2.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-asm:jar:3.1.2.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-context-support:jar:3.1.2.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-expression:jar:3.1.2.RELEASE:compile
[INFO] |  +- org.springframework:spring-test:jar:3.1.2.RELEASE:test (scope managed from compile)
[INFO] |  +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.12:compile
[INFO] |  |  \- org.codehaus.jackson:jackson-core-asl:jar:1.9.12:compile
[INFO] |  +- ognl:ognl:jar:3.0.6:compile
[INFO] |  +- javassist:javassist:jar:3.12.1.GA:compile
[INFO] |  +- log4j:log4j:jar:1.2.16:compile
[INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] |  +- org.apache.poi:poi:jar:3.8:compile
[INFO] |  |  \- commons-codec:commons-codec:jar:1.5:compile
[INFO] |  +- org.apache.poi:poi-ooxml:jar:3.8:compile
[INFO] |  |  \- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  +- org.apache.poi:poi-ooxml-schemas:jar:3.8:compile
[INFO] |  |  \- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO] |  |     \- stax:stax-api:jar:1.0.1:compile
[INFO] |  +- commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO] |  |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- com.thoughtworks.xstream:xstream:jar:1.3.1:compile
[INFO] |  |  \- xpp3:xpp3_min:jar:1.1.4c:compile
[INFO] |  +- org.jasig.cas.client:cas-client-core:jar:3.2.1:compile
[INFO] |  +- com.caucho:hessian:jar:4.0.33:compile
[INFO] |  +- net.sourceforge.pinyin4j:pinyin4j:jar:2.5.0:compile
[INFO] |  +- org.freemarker:freemarker:jar:2.3.20:compile
[INFO] |  +- commons-lang:commons-lang:jar:2.5:compile
[INFO] |  +- javax.mail:mail:jar:1.4.1:compile
[INFO] |  \- velocity:velocity:jar:1.5:compile
[INFO] |     +- commons-collections:commons-collections:jar:3.1:compile
[INFO] |     \- oro:oro:jar:2.0.8:compile
[INFO] +- com.fx.fxplatform:fxplatform-server:jar:1.0.0-SNAPSHOT:compile
[INFO] |  +- com.fx.fxplatform:fxplatform-cache:jar:1.0.0-SNAPSHOT:compile
[INFO] |  |  +- com.fx.fxplatform:fxplatform-redis:jar:1.0.0-SNAPSHOT:compile
[INFO] |  |  |  \- com.alibaba:fastjson:jar:1.1.23:compile
[INFO] |  |  +- org.springframework.data:spring-data-mongodb:jar:1.1.0.RELEASE:compile
[INFO] |  |  |  +- org.springframework.data:spring-data-commons-core:jar:1.4.0.RELEASE:compile
[INFO] |  |  |  \- org.mongodb:mongo-java-driver:jar:2.9.1:compile
[INFO] |  |  +- jdom:jdom:jar:1.0:compile
[INFO] |  |  \- cglib:cglib-nodep:jar:2.2:compile
[INFO] |  +- org.mybatis:mybatis:jar:3.0.5:compile
[INFO] |  +- org.mybatis:mybatis-spring:jar:1.0.1:compile
[INFO] |  |  +- org.springframework:spring-tx:jar:3.0.5.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-jdbc:jar:3.1.2.RELEASE:compile (version managed from 3.0.5.RELEASE)
[INFO] |  +- commons-fileupload:commons-fileupload:jar:1.2.1:compile
[INFO] |  +- javax.activation:activation:jar:1.1.1:compile
[INFO] |  +- org.apache.struts:struts2-core:jar:2.3.15.1:compile
[INFO] |  |  +- org.apache.struts.xwork:xwork-core:jar:2.3.15.1:compile
[INFO] |  |  |  +- asm:asm:jar:3.3:compile
[INFO] |  |  |  \- asm:asm-commons:jar:3.3:compile
[INFO] |  |  |     \- asm:asm-tree:jar:3.3:compile
[INFO] |  |  +- commons-io:commons-io:jar:2.0.1:compile
[INFO] |  |  \- com.sun:tools:jar:1.5.0:system
[INFO] |  +- org.apache.struts:struts2-spring-plugin:jar:2.3.15.1:compile
[INFO] |  |  \- org.apache.commons:commons-lang3:jar:3.1:compile
[INFO] |  +- org.apache.struts:struts2-convention-plugin:jar:2.3.15.1:compile
[INFO] |  +- org.apache.struts:struts2-json-plugin:jar:2.3.15.1:compile
[INFO] |  +- redis.clients:jedis:jar:2.1.0:compile
[INFO] |  |  \- commons-pool:commons-pool:jar:1.5.5:compile
[INFO] |  +- org.codehaus.groovy:groovy-all:jar:2.2.1:compile
[INFO] |  +- com.itextpdf:itextpdf:jar:5.4.5:compile
[INFO] |  +- com.itextpdf:itext-asian:jar:5.2.0:compile
[INFO] |  +- net.sf.json-lib:json-lib:jar:2.4:compile
[INFO] |  |  \- net.sf.ezmorph:ezmorph:jar:1.0.6:compile
[INFO] |  +- org.csource:org-csource:jar:1.24:compile
[INFO] |  +- org.quartz-scheduler:quartz:jar:1.8.6:compile
[INFO] |  +- org.springframework.data:spring-data-redis:jar:1.0.2.RELEASE:compile
[INFO] |  |  \- org.slf4j:jcl-over-slf4j:jar:1.6.6:compile
[INFO] |  \- org.apache.ant:ant:jar:1.7.0:compile
[INFO] |     \- org.apache.ant:ant-launcher:jar:1.7.0:compile
[INFO] +- com.fx.oa:sys-settings-api:jar:0.0.1-SNAPSHOT:compile
[INFO] |  \- com.fx.oa:oa-util:jar:0.0.1-SNAPSHOT:compile
[INFO] |     +- org.seleniumhq.selenium:selenium-java:jar:2.39.0:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-android-driver:jar:2.39.0:compile
[INFO] |     |  |  \- org.seleniumhq.selenium:selenium-remote-driver:jar:2.39.0:compile
[INFO] |     |  |     +- org.json:json:jar:20080701:compile
[INFO] |     |  |     \- com.google.guava:guava:jar:15.0:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-chrome-driver:jar:2.39.0:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-htmlunit-driver:jar:2.39.0:compile
[INFO] |     |  |  +- net.sourceforge.htmlunit:htmlunit:jar:2.13:compile
[INFO] |     |  |  |  +- xalan:xalan:jar:2.7.1:compile
[INFO] |     |  |  |  |  \- xalan:serializer:jar:2.7.1:compile
[INFO] |     |  |  |  +- org.apache.httpcomponents:httpmime:jar:4.3.1:compile
[INFO] |     |  |  |  +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.13:compile
[INFO] |     |  |  |  +- xerces:xercesImpl:jar:2.11.0:compile
[INFO] |     |  |  |  +- net.sourceforge.nekohtml:nekohtml:jar:1.9.19:compile
[INFO] |     |  |  |  +- net.sourceforge.cssparser:cssparser:jar:0.9.11:compile
[INFO] |     |  |  |  |  \- org.w3c.css:sac:jar:1.3:compile
[INFO] |     |  |  |  \- org.eclipse.jetty:jetty-websocket:jar:8.1.12.v20130726:compile
[INFO] |     |  |  |     +- org.eclipse.jetty:jetty-util:jar:8.1.12.v20130726:compile
[INFO] |     |  |  |     +- org.eclipse.jetty:jetty-io:jar:8.1.12.v20130726:compile
[INFO] |     |  |  |     \- org.eclipse.jetty:jetty-http:jar:8.1.12.v20130726:compile
[INFO] |     |  |  \- org.apache.httpcomponents:httpclient:jar:4.3.1:compile
[INFO] |     |  |     \- org.apache.httpcomponents:httpcore:jar:4.3:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-firefox-driver:jar:2.39.0:compile
[INFO] |     |  |  \- org.apache.commons:commons-exec:jar:1.1:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-ie-driver:jar:2.39.0:compile
[INFO] |     |  |  +- net.java.dev.jna:jna:jar:3.4.0:compile
[INFO] |     |  |  \- net.java.dev.jna:platform:jar:3.4.0:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-iphone-driver:jar:2.39.0:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-safari-driver:jar:2.39.0:compile
[INFO] |     |  +- org.seleniumhq.selenium:selenium-support:jar:2.39.0:compile
[INFO] |     |  |  \- org.seleniumhq.selenium:selenium-api:jar:2.39.0:compile
[INFO] |     |  \- org.webbitserver:webbit:jar:0.4.14:compile
[INFO] |     |     \- io.netty:netty:jar:3.5.2.Final:compile
[INFO] |     \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- javax.servlet:jsp-api:jar:2.0:provided
[INFO] +- com.fx.oa:per-evaluation-api:jar:0.0.1-SNAPSHOT:compile
[INFO] |  \- com.fx.oa:com-dependence-api:jar:0.0.1-SNAPSHOT:compile
[INFO] |     +- com.fx.oa:oa-ldap:jar:0.0.1-SNAPSHOT:compile
[INFO] |     |  +- org.springframework:spring-aspects:jar:3.1.2.RELEASE:compile
[INFO] |     |  +- org.springframework:spring-instrument:jar:3.1.2.RELEASE:compile
[INFO] |     |  +- org.springframework.ldap:spring-ldap-core:jar:1.3.1.RELEASE:compile
[INFO] |     |  +- org.springframework.ldap:spring-ldap-core-tiger:jar:1.3.1.RELEASE:compile
[INFO] |     |  +- org.springframework.ldap:spring-ldap-odm:jar:1.3.1.RELEASE:compile
[INFO] |     |  |  \- commons-cli:commons-cli:jar:1.2:compile
[INFO] |     |  +- org.springframework.ldap:spring-ldap-ldif-core:jar:1.3.1.RELEASE:compile
[INFO] |     |  \- org.springframework.ldap:spring-ldap-ldif-batch:jar:1.3.1.RELEASE:compile
[INFO] |     |     +- org.springframework.batch:spring-batch-core:jar:2.0.3.RELEASE:compile
[INFO] |     |     |  \- org.codehaus.jettison:jettison:jar:1.0:compile
[INFO] |     |     \- org.springframework.batch:spring-batch-infrastructure:jar:2.0.3.RELEASE:compile
[INFO] |     +- com.fx.oa:sys-settings:jar:0.0.1-SNAPSHOT:compile
[INFO] |     \- com.fx.oa:per-jobgrade:jar:0.0.1-SNAPSHOT:compile
[INFO] |        \- com.fx.oa:per-jobgrade-api:jar:0.0.1-SNAPSHOT:compile
[INFO] +- c3p0:c3p0:jar:0.9.1.2:compile
[INFO] \- mysql:mysql-connector-java:jar:5.1.13:compile
[INFO]

   经对依赖树进行检索,发现有oa-workflow-interface下cxf-rt-frontend-jaxws的依赖eronimo-javamail_1.4_spec,於是根据maven的exclusion,排除传递依赖如下:

1
2
3
4
5
6
7
8
9
10
11
< dependency >
< groupId >org.apache.cxf</ groupId >
< artifactId >cxf-rt-frontend-jaxws</ artifactId >
< version >2.7.14</ version >
< exclusions >
< exclusion >
< groupId >org.apache.geronimo.specs</ groupId >
< artifactId >geronimo-javamail_1.4_spec</ artifactId >
</ exclusion >
</ exclusions >
</ dependency >

    打包后经测试不再出现上述问题


     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/1831183,如需转载请自行联系原作者


相关文章
|
1天前
|
存储 Java 开发者
探索Java开发中触发空指针异常的场景
作为一名后端开发者在Java编程的世界中,想必大家对空指针并不陌生,空指针异常是一种常见而又令人头疼的问题,它可能会在我们最不经意的时候突然出现,给我们的代码带来困扰,甚至导致系统的不稳定性,而且最可怕的是有时候不能及时定位到它的具体位置。针对这个问题,我们需要深入了解触发空指针异常的代码场景,并寻找有效的方法来识别和处理这些异常情况,而且我觉得空指针异常是每个Java开发者都可能面临的挑战,但只要我们深入了解它的触发场景,并采取适当的预防和处理措施,我们就能够更好地应对这个问题。那么本文就来分享一下实际开发中一些常见的触发空指针异常的代码场景,并分享如何有效地识别和处理这些异常情况。
9 1
探索Java开发中触发空指针异常的场景
|
2天前
|
SQL 网络协议 Java
Java异常详解
Java异常详解
7 1
|
6天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
35 0
|
11天前
|
安全 Java
Java为什么不让用指针?
总之,Java的设计目标之一是提供一个安全、稳定和易于开发的平台,通过禁止直接使用指针来实现这些目标。虽然指针可以提供更大的灵活性,但也带来了许多潜在的问题和安全风险。因此,Java采用了更高级的内存管理和安全性机制,以减少这些问题的发生。
16 1
|
11天前
|
Java 程序员 编译器
|
13天前
Swagger2异常:java.lang.NumberFormatException: For input string: ““
Swagger2异常:java.lang.NumberFormatException: For input string: ““
19 1
|
14天前
|
存储 Java 程序员
JavaSE&Java的异常
JavaSE&Java的异常
25 0
|
2月前
|
XML Java Maven
【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿
【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿
41 0
|
8天前
|
Java Maven
idea中maven项目pom文件Could not acquire lock(s)
idea中maven项目pom文件Could not acquire lock(s)
|
27天前
|
Java Maven Spring
【操作宝典】IntelliJ IDEA新建maven项目详细教程
【操作宝典】IntelliJ IDEA新建maven项目详细教程
36 1

推荐镜像

更多