Java-将第三方接口打包jar部署到tomcat上提示wsdl文件找不到
最近在用java做一个Web项目,该web项目需要调用第三方平台(UPS)的WebService接口。我首先新建一个项目ups-service,然后通过jax-ws工具将从wsdl文件中生成客户端访问代码。将生成的代码导入到ups-service项目中,将wsdl文件也放在该工程中。如图:
但是当我把该项目打成jar文件,放到我的web项目中使用时,提示wsdl文件找不到。错误代码如下:
生成的wsdl客户端文件加载wsdl文件部分的代码如下:
ups-service我运行单元测试是没问题的,部署到tomcat上面就说wsdl文件找不到。错在哪里呢?无头绪ing..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
BlaBlaClass.class.getResouce(".");
这种写法, 你在tomcat里得到的应该是"e://.../eclipse"; 我试了下,在我机子上得到的是空.
用
BlaBlaClass.class.getResouce("/");
在我的tomcat上可以拿到:
file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/df/WEB-INF/classes/
加上.wsdl的路径可以拿到:
file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/df/WEB-INF/classes/sdf/xsd/xxxx.wsdl
我把xsd/xxxx.wsdl在web项目src里考了一份,则可以在上述路径看到此.wsdl文件.
希望对你有所帮助.
更新:
.class.getResource(path), 对路径path做更改, 以'/'开头则去掉'/', 不以'/'开头则加上当前类包名,以'/'分割; 然后调用对应classloader的getResource()方法.
package package1;
import org.junit.Test;
public class BlaBla {
@Test
public void test0(){
System.out.println("begin test0");
ClassLoader cl=this.getClass().getClassLoader();
while(cl!=null){
System.out.println("ClassLoader: "+cl);
System.out.println("dir of '/': "+cl.getResource(""));
cl=cl.getParent();
}
}
@Test
public void test1() {
System.out.println("begin test1");
System.out.println(this.getClass().getResource("/"));
System.out.println(this.getClass().getClassLoader().getResource(""));
}
@Test
public void test2() {
System.out.println("begin test2");
System.out.println(this.getClass().getResource("."));
System.out.println(this.getClass().getClassLoader().getResource("package1/."));
}
}
本地运行结果:
begin test0
ClassLoader: sun.misc.Launcher$AppClassLoader@7dcb3cd
dir of '/': file:/D:/workspace/fd/bin/
ClassLoader: sun.misc.Launcher$ExtClassLoader@2aa05bc3
dir of '/': null
begin test1
file:/D:/workspace/fd/bin/
file:/D:/workspace/fd/bin/
begin test2
file:/D:/workspace/fd/bin/package1/
file:/D:/workspace/fd/bin/package1/
在tomcat7上, 写一个servlet, 调用test0(),test1(),test2(), 可见:
begin test0
ClassLoader: WebappClassLoader
context: /df
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@60bb6b37
dir of '/': file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/df/WEB-INF/classes/
ClassLoader: org.apache.catalina.loader.StandardClassLoader@60bb6b37
dir of '/': file:/D:/sw/apache-tomcat-7.0.40/lib/
ClassLoader: sun.misc.Launcher$AppClassLoader@7dcb3cd
dir of '/': null
ClassLoader: sun.misc.Launcher$ExtClassLoader@2aa05bc3
dir of '/': null
begin test1
file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/df/WEB-INF/classes/
file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/df/WEB-INF/classes/
begin test2
null
null