webservice请求数据时类com/sun/tools/internal/xjc/api/XJC找不到的原因探究
2021-05-20 05:29
标签:process erro 反编译工具 windows esc root权限 模式 time 位置 一.缘由 最近做的一个项目中,有需要请求webservice数据的地方, JaxWsDynamicClientFactory dcf = null; Client client = dcf.createClient("地址"); 然后client再调用invoke方法,起初在eclipse中测试的时候,没有出现任何问题,但是将包部署到服务器的时候,出现client调用invoke方法的时候,出现了一段异常: 二.分析 在网上查了一些资料,众说纷纭,很多人说就是缺少一个依赖,说这个依赖在tools.jar里里面,直接把这个包引进去就好,用反编译工具查看了一下这个jar包的结构,这个类确实在这里面,于是我把这个包引入这个项目里面,运行,还是报同样的错,说明这个方法不行。当然网上也有一些说缺其他jar包的,当然也都不可以。这不是一个普通的jar包,这样引入,项目无法依赖到。
进一步分析,同样的代码,在eclipse中运行正常,在linux服务器里面出现这样的异常,说明不是项目本身的问题,一定是java环境的问题。想了一下,自己所用的服务器的jdk是centOS系统在安装的时候自带的,可能会和自己手动安装的有些差异,应该从这个地方入手。 三.解决方案 CentOS7.0虽然自带JDK1.7和1.8,运行“java -version”命令也可以看到版本信息,但是jdk的安装环境不全,比如缺少tool.jar和dt.jar等,这就导致“javac”等这样的命令即便配置了环境变量也不能用,所以要重新安装jdk,并且配置环境变量,并解决“javac”命令不可用的问题。 下载安装JDK(必须在连接外网的情况下进行,我也是找了负责机房的老师进入机房解决的,还要专门插外网的网线) 1.CentOS下,首先让当前用户获取root权限,打开终端输入命令: su root yum search java-1.7 java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment yum -y install java-1.7.0-openjdk-devel.x86_64 已安装:java-1.7.0-openjdk-devel.x86_64 1:1.7.0.141-2.6.10.1.el7_3 作为依赖被升级: 完毕! 4.安装结束后,浏览下安装后的目录: JDK安装在/usr/lib/jvm/文件夹下。在这个文件夹下有多个JDK版本,通过已安装成功的提示信息里面的JDK版本,找到我们刚安装的版本文件夹。 如:我这里找到新安装的JDK文件夹是:/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64 cd /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64/lib ls amd64 ct.sym dt.jar ir.idl jconsole.jar jexec orb.idl sa-jdi.jar tools.jar 5.接下来配置环境变量: ①获取JDK的安装路径: 第四步中,我们所在的文件夹是/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64/lib中。 输入下面两条命令(注意cd后有空格),获取到的就是JDK的安装目录: cd . pwd ②使用命令编辑环境变量文件: vim /etc/profile ③将下面的JAVA_HOME修改为刚获取的JAVA_HOME路径,然后拷贝到文件底部。 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64 ④输入完成后,按键“ESC”切换到Vim的命令模式,输入命令(冒号,按住“SHIFT+:”即可),保存退出 :wq! source /etc/profile 在任意的文件路径下,终端输入命令: javac [root@localhost java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64]# javac 8.当出现以上内容时,说明jdk已经被正常配置。重新启动项目,发现之前的问题就不复存在了。 四.总结 在使用系统自带的软件时,要多加注意这样安装和手动安装的差异。 webservice请求数据时类com/sun/tools/internal/xjc/api/XJC找不到的原因探究 标签:process erro 反编译工具 windows esc root权限 模式 time 位置 原文地址:https://www.cnblogs.com/EthanShao/p/11318047.html
dcf = JaxWsDynamicClientFactory.newInstance(); - with linked exception:
[java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC]
at org.apache.cxf.common.jaxb.JAXBUtils.createSchemaCompiler(JAXBUtils.java:713)
at org.apache.cxf.common.jaxb.JAXBUtils.createSchemaCompilerWithDefaultAllocator(JAXBUtils.java:720)
... 43 more
Caused by: java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.cxf.common.jaxb.JAXBUtils.createSchemaCompiler(JAXBUtils.java:706)
... 44 more
2.查看可安装的JDK版本:
在查询结果列表如下:
java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-headless.x86_64 : The OpenJDK runtime environment without audio and video support
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
3.安装这一款,命令:
安装完成提示:
java-1.7.0-openjdk.x86_64 1:1.7.0.141-2.6.10.1.el7_3 java-1.7.0-openjdk-headless.x86_64 1:1.7.0.141-2.6.10.1.el7_3 nspr.x86_64 0:4.13.1-1.0.el7_3 nss.x86_64 0:3.28.4-1.2.el7_3
nss-sysinit.x86_64 0:3.28.4-1.2.el7_3 nss-tools.x86_64 0:3.28.4-1.2.el7_3 nss-util.x86_64 0:3.28.4-1.0.el7_3
记住上面“已安装”后面的文件夹名称,不要搞混了。我们用此文件所在的路径作为JAVA_HOME。切记!
查询结果:
终于见到了久违的tool.jar 和dt.jar包。因为centOS 7.0自带的JDK压根就没有这些jar包,所以不管你环境变量配置正确与否,“javac”命令也不能用,因为 这个命令依赖tool.jar这个jar包。
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.1.el7_3.x86_64
这个路径,即:JAVA_HOME
Vim开文件后,键盘按“E”,进入编辑模式,然后按几下键“pagedown”,来到文件底部。
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
解释:
- 只需要改第一行“export JAVA_HOME=”后的部分为你的JDK路径,注意末尾不要加“/”。其他都无需更改。
- exprot命令用于将shell变量输出为环境变量
- “:”冒号,linux中用于分割路径,Windows中用“;” 分割。,在此分割JAVA_HOME和其他环境变量($PATH)
- CLASSPATH中的 “.” 不能丢失。CLASSPATH指引到tools.jar,才可以在任意目录下用“javac”命令
6.使环境变量立即生效命令:
7.检查环境变量是否配置成功:
显示结果如下,环境变量配置成功:
用法: javac
文章标题:webservice请求数据时类com/sun/tools/internal/xjc/api/XJC找不到的原因探究
文章链接:http://soscw.com/index.php/essay/87855.html