[求助]部署在jboss3.2.5上的应用通过Axis调用Web Service总是报错

chexw 2005-02-28 10:11:09
exception

javax.servlet.ServletException: Servlet execution threw an exception


root cause

java.lang.NoClassDefFoundError: tservice1/MyServiceSoapBindingStub
tservice2.TUtil.getData(TUtil.java:15)
tservice2.TestService.doGet(TestService.java:21)
javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

说明:
1.tservice1.MyService为提供服务一方,仅有一个方法getData,并可通过JBuilder2005生成的TestCase成功调用.
2.tservice2.TestService类为一个servlet,它调用TUtil.getData方法.
3.TUtil.getData方法中的代码来自自动生成的TestCase,因此程序本身应该没有错误。
4.这些由axis自动生成的类的class文件都位于war包中

错误原因应该是类的装载问题。我尝试多次,如将Axis的两个包jaxrpc.jar和saaj.jar放在jbossweb-tomcat50.sar下,或放入自已的war包中,或加入jboss启动的classpath,或者加入系统的classpath环境变量都没有解决
...全文
65 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chexw 2005-03-01
我直接调用axis的类,可以实现相同的功能。
但为什么调用自动生成的这些类就会出错呢?
回复
lhj 2005-02-28
提示的是tservice1/MyServiceSoapBindingStub 这个类没有找到,应该是没有正确部署自动生成的代码。
回复
chexw 2005-02-28
在调用方的tservice1.*都是自动生成的代码,并且tservice1.*.class和tservice2.*.class都在ws2.war\WEB-INF\class下
TUtil的getData方法如下:
...
tservice1.MyServiceSoapBindingStub binding;
try {
tservice1.MyServiceServiceLocator locator =new tservice1.MyServiceServiceLocator();
binding = (tservice1.MyServiceSoapBindingStub)locator.getMyService();//出错了!
value = binding.getData(name);
}
catch (Exception e) {
e.printStackTrace();
}
...
现在能找到tservice1.MyServiceServiceLocator,而找不到tservice1.MyServiceSoapBindingStub,应该不是这个原因。

public class MyServiceSoapBindingStub extends org.apache.axis.client.Stub implements tservice1.MyService
我的分析是由于org.apache.axis.client.Stub引用了一些位于jaxrpc.jar和saaj.jar中java.*和javax.*的类,而这些类的装载过程有一些特殊,从而导致无法装载org.apache.axis.client.Stub,表现为找不到MyServiceSoapBindingStub

当然我的分析也许是误导,请发表您的看法,大家相互提高吧
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2005-02-28 10:11
社区公告
暂无公告