首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HttpInvokerServiceExporter给出500错误代码

使用HttpInvokerServiceExporter给出500错误代码
EN

Stack Overflow用户
提问于 2016-07-10 17:25:43
回答 0查看 2.8K关注 0票数 1

在过去的两天里,我一直在努力使用HttpInvokerServiceExporter公开一个服务。错误提示Did not receive successful HTTP response完整的堆栈跟踪在下面了解详细信息。在Git repo中检查代码。链接为- Github link

代码语言:javascript
复制
org.springframework.remoting.RemoteAccessException: Could not access HTTP invoker remote service at [http://localhost:8080/spring-remoting/AccountService]; nested exception is java.io.IOException: Did not receive successful HTTP response: status code = 500, status message = [Internal Server Error]
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.convertHttpInvokerAccessException(HttpInvokerClientInterceptor.java:216)
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:147)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
com.sun.proxy.$Proxy8.add(Unknown Source)
com.remoting.ClientInvoker.getCube(ClientInvoker.java:9)
org.apache.jsp.process_jsp._jspService(process_jsp.java:118)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

java.io.IOException: Did not receive successful HTTP response: status code = 500, status message = [Internal Server Error]
org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor.validateResponse(SimpleHttpInvokerRequestExecutor.java:185)
org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor.doExecuteRequest(SimpleHttpInvokerRequestExecutor.java:92)
org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor.executeRequest(AbstractHttpInvokerRequestExecutor.java:138)
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:194)
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:176)
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:144)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
com.sun.proxy.$Proxy8.add(Unknown Source)
com.remoting.ClientInvoker.getCube(ClientInvoker.java:9)
org.apache.jsp.process_jsp._jspService(process_jsp.java:118)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我已经正确地遵循了文档,并且已经实现了所有步骤。下面是服务接口:

代码语言:javascript
复制
package com.remoting;

public interface AccountService {
    public int add(int a, int b);
}

然后是服务实现

代码语言:javascript
复制
package com.remoting;
public class AccountServiceImpl implements AccountService {
    @Override
    public int add(int a, int b) {
        return a + b;
    }
}

然后是web.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
    <display-name>spring-remoting</display-name>

<!-- The front controller of this Spring Web application, responsible for 
    handling all application requests -->
    <servlet>
        <servlet-name>accountExporter</servlet-name>
        <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>accountExporter</servlet-name>
        <url-pattern>/AccountService</url-pattern>
    </servlet-mapping>
</web-app>

然后是应用程序bean。应用程序bean放在/WEB-INF/classes目录下的applicationContext.xml中:

代码语言:javascript
复制
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

<bean id="accountService" class="com.remoting.AccountServiceImpl"></bean>

<bean name="accountExporter"
    class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
    <property name="service" ref="accountService" />
    <property name="serviceInterface" value="com.remoting.AccountService" />
</bean>
<bean id="httpServer"
    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceUrl" value="http://localhost:8080/spring-remoting/AccountService"></property>
    <property name="serviceInterface" value="com.remoting.AccountService"></property>
    </bean>

</beans>

现在,为了调用服务,我有两个jsp文件和一个helper类来加载bean并调用函数:

index.jsp

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
    <form action="process.jsp">
    Enter Number:<input type="text" name="number" /> <input type="submit"
        value="cube" />
    </form>
  </body>
</html>

process.jsp

代码语言:javascript
复制
<jsp:include page="index.jsp"></jsp:include>  
<hr/>  
<%@page import="com.remoting.ClientInvoker"%>  

<%  
  int number=Integer.parseInt(request.getParameter("number"));  
  out.print("sum of "+number+" is: "+ClientInvoker.sum(number));  
%>  

最后是ClientInvoker

代码语言:javascript
复制
package com.remoting;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;  

public class ClientInvoker {  
    public static int sum(int number){  
        ApplicationContext context = new      ClassPathXmlApplicationContext("classpath:applicationContext.xml");  
        AccountService service = (AccountService)context.getBean("httpServer");  
        return service.add(4, 4);  
    }  
}

applicationContext.xml被放在/WEB-INF/classes目录中。

请告诉我哪里出错了。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38290431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档