论坛首页 Java版 Spring

在tomcat用spring架构调用远程服务问题

浏览 1252 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-04-18 关键字: 远程调用
我的服务端和客户端都是tomcat,在客户端servlet中调用远程服务端接口,用spring的rmi,httpinvoker等方式均不能拿到;可是单独在客户端启动测试代码没有问题,请各位大师指教,,,
服务端配置:
remoting-servlet.xml
<beans>
<!-- 然后,我们将使用 RmiServiceExporter 来暴露我们的服务: -->

<bean name="/AccountService"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<!--bean class="org.springframework.remoting.rmi.RmiServiceExporter"-->
<!-- does not necessarily have to be the same name as the bean to be exported -->
<!--property name="serviceName" value="AccountService" /-->
<property name="service" ref="userAndregionService" />
<property name="serviceInterface"
value="com.xxx.usermanager.service.IUserService" />
<!-- defaults to 1099 -->
<!--property name="registryPort" value="1199" /-->
</bean>
</beans>
web.xml
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-beans.xml /WEB-INF/remoting-servlet.xml</param-value>
</context-param>
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
...
客户端配置:
spring-client.xml
...
<bean id="accountService"
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean" lazy-init="true">
<property name="serviceUrl"
value="http://localhost:8080/newserver/AccountService" />
<property name="serviceInterface"
value="com.xxx.usermanager.service.IUserService" />
</bean>
...
servlet coding:

public class LoginController extends AbstractController {

private Account account;

private String helloWord;

private String viewPage;

protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
String classpath = this.getClass().getResource("/").getPath();
String xmlPath = "spring-client.xml";
String Config_File = classpath + xmlPath;

// this ctx
ApplicationContext ctx = new ClassPathXmlApplicationContext(xmlPath);
Account iu = (Account) ctx.getBean("iu");
System.out.println(iu.isAuthSystemUser("1111", "1111"));
...
   
时间:2007-04-18
mubuc 写道
feidi 写道
web.xml
...

<param-value>/WEB-INF/spring-beans.xml /WEB-INF/remoting-servlet.xml</param-value>
...
...


别的都不用看,单看红字这一句,就知道你的配错了.
/WEB-INF/remoting-servlet.xml这个文件不要配.它是
org.springframework.web.servlet.DispatcherServlet这个servlet自去按照名称自已找.

<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/http/*</url-pattern>
</servlet-mapping>

这样就可以找到remoting-servlet.xml了....

你搞定了要谢谢我才行....

<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/AccountService</url-pattern>
</servlet-mapping>
上面是我的servlet配置,按照你的方案,还是不行
我的出错信息,跳在ie里了
java.lang.NoClassDefFoundError: com/xxxx/usermanager/service/IUserService
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Class.java:2365)
java.lang.Class.getDeclaredMethods(Class.java:1763)
java.beans.Introspector$1.run(Introspector.java:1265)
java.security.AccessController.doPrivileged(Native Method)
java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1263)
java.beans.Introspector.getTargetMethodInfo(Introspector.java:1129)
java.beans.Introspector.getBeanInfo(Introspector.java:387)
java.beans.Introspector.getBeanInfo(Introspector.java:159)
org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:142)
org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:83)
org.springframework.beans.BeanWrapperImpl.setIntrospectionClass(BeanWrapperImpl.java:239)
org.springframework.beans.BeanWrapperImpl.setWrappedInstance(BeanWrapperImpl.java:197)
org.springframework.beans.BeanWrapperImpl.setWrappedInstance(BeanWrapperImpl.java:180)
org.springframework.beans.BeanWrapperImpl.<init>(BeanWrapperImpl.java:133)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:641)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:626)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:381)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:140)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:640)
com.xxxxx.otapush.web.servlet.LoginController.handleRequestInternal(LoginController.java:29)
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:820)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:755)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:360)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   
0 请登录后投票
时间:2007-04-18
mubuc 写道
feidi 写道
java.lang.NoClassDefFoundError: com/xxxx/usermanager/service/IUserService
java.lang.Class.getDeclaredMethods0(Native Method)
.............



这就是说你发布的服务接口IUserService,这个interface,在你的客户端也要有,现在是没有,所以报这个错.

看样子,你的服务已经发布成功了,就是客户端还没有搞好.


是啊,是啊,可是我用testcase测试也没有IUserService接口啊。。。是不是tomcat的容器对这种方法什么限制呢,各位大师有没有成功的案例呢?
   
0 请登录后投票
时间:2007-04-19
mubuc 写道
feidi 写道

是啊,是啊,可是我用testcase测试也没有IUserService接口啊。。。是不是tomcat的容器对这种方法什么限制呢,各位大师有没有成功的案例呢?


真搞不懂,单元测试,怎么会在ie里报错?没道理测试不用IUserService接口?可以不可把代码都贴出来
哈哈,已经搞定了.正如mubuc所说,原来我的testcase是在eclipse下跑的,里面的classpath是它都给搞定了,而我的tomcat是起在外边,所以必须把所有接口和所用的的包打成jar放到项目web-inf/lib下,否则就会找不到....唉,还是基础的东东...搞了好长时间...
多谢mubuc...
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐