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,如需转载请自行联系原作者


相关文章
|
5天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
5天前
|
数据采集 分布式计算 Java
Kettle的Java开发环境需要什么jar包?
【10月更文挑战第24天】Kettle的Java开发环境需要什么jar包?
31 2
|
7天前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
|
8天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
22 2
|
12天前
|
Java 索引
如何避免在 Java 中引发`StringIndexOutOfBoundsException`异常
在Java中,处理字符串时若访问了不存在的索引,会抛出`StringIndexOutOfBoundsException`异常。为避免此异常,应确保索引值在有效范围内,例如使用`length()`方法检查字符串长度,并确保索引值不小于0且不大于字符串长度减1。
|
14天前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
|
20天前
|
Java
让星星⭐月亮告诉你,Java异常分类[Throwable(Error/Exception(RuntimeException/其他异常)) 检查时异常 非检查时异常]
本文深入解析了Java异常处理机制,重点介绍了`Throwable`类及其子类`Error`和`Exception`,并通过实例代码、流程图和表格详细解释了异常的分类、区别及处理方法,帮助读者掌握异常处理的关键技巧,提升程序的稳定性和健壮性。
38 1
|
25天前
|
Java 程序员
关于java异常
关于java异常
20 5
|
25天前
|
Java 程序员 编译器
Java中的异常类型
Java中的异常类型
21 3
|
25天前
|
存储 Java 编译器
【一步一步了解Java系列】:认识异常类
【一步一步了解Java系列】:认识异常类
21 2