最近公司的项目需要调用其它公司给的接口,采用的是webservice,所以我们需要写webservice客户端来请求他们的服务端。但是在测试的时候总是报错,搞得我很是头疼。经过一下午的折腾,看了很多博客,自己终于测试好了。现在来给大家看看(我用的是CXF)
因为公司的其他同事写过webservice服务端的接口,所以看了一下他们的代码。我发现他们把CXF的lib目录下的jar包全部都放项目的lib目录下了,难道说我写个客户端也需要将所有jar包都导进来吗?这显然是有些多余。下面来看我Maven中添加的jar包:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.1.11</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.11</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.11</version>
</dependency>
我的客户端请求代码:
//返回的对象数组
Object[] objects;
//请求接口信息(需要接口的发布地址)
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client =
dcf.createClient(
"http://localhost:8080/xxxx/webservice/xxxx?wsdl"
);
objects = client.invoke(对应接口的方法名,方法需要的参数);
原以为这样就ok了,但是真正的问题才出现。发出请求的时候总是报一些奇奇怪怪的问题。主要就俩:1、java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC ;2、No compiler detected make sure you are running on top of a JDK instead of a JRE;看了网上的博客,这一顿改。将Eclipse引用的jre改为了jdk
jdk的lib目录下有tools.jar,复制了一份到jre的lib下,等等一系列操作,可还是报错。。。
最终,将tomcat用的jre换成了jdk(jdk的lib目录下有tools这个jar包),问题解决
因为jdk的lib目录下是有tools这个jar包的,或者tomcat还是用jre,将tools这个jar包复制到jre的lib目录下的ext目录(或者直接放到lib目录下。因为现在没在公司,没法测试。我记得当时应该是放在了ext目录下,大家到时候可以俩种情况都试一下)
第一次写博客,写的不好的或者有什么错误的,大家及时给我留言,我也及时改正。希望大家多多交流,相互学习!
个人建的交流群1125844267,欢迎大家加入!
如果内容对大家有所帮助,感谢鼓励!实现我小时候一人给我一块钱的美梦,哈哈!