java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC

现象

 

使用 JaxWsDynamicClientFactory调用接口,idea本地可以调用成功。部署到服务器报错:
 ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Unable to create schema compiler] with root cause
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:718)
	at org.apache.cxf.common.jaxb.JAXBUtils.createSchemaCompilerWithDefaultAllocator(JAXBUtils.java:732)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createSchemaCompiler(DynamicClientFactory.java:445)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:325)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:243)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:236)
	at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:191)

 

分析

参考 https://bbs.csdn.net/topics/392163047

wxynxyo 的回复:

你这个问题不是代码的问题,是你系统环境变量配置错了。
你IDEA使用了JDK作为编译和运行环境,然后在LINUX上面检查系统配置,估计是用了JRE

 

根据wxynxyo 提供的线索,检查服务器的java配置

# which java
/usr/bin/java
# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 2月  25 18:53 /usr/bin/java -> /etc/alternatives/java
# cd /etc/alternatives
# ll java
lrwxrwxrwx. 1 root root 72 2月  25 18:53 java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/java

可见,java的链接指向的是jre

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre

解决

  1. 下载jdk的包(比如:jdk-8u171-linux-x64.tar.gz),传到服务器/usr/lib/jvm
  2. 解压 gzip -cd  jdk-8u171-linux-x64.tar.gz  | tar -xvf -
  3. 重新配置java链接的指向  
[root@localhost jvm]# ll /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/java
[root@localhost jvm]# ln -sf /usr/lib/jvm/jdk1.8.0_171/bin/java /etc/alternatives/java
[root@localhost jvm]# ll /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/jdk1.8.0_171/bin/java 

重启Tomcat服务。再次调用就不报错了。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值