2016-07-10 7 views
0

を与えるHttpInvokerServiceExporterを使用します。エラーはDid not receive successful HTTP responseと表示されています。 Git repoでコードをチェックします。リンクがある - Github link私はHttpInvokerServiceExporterを使用してサービスを公開するために、最後の2日間に苦労しています500エラーコード

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) 

私が正しくドキュメントを踏襲しており、すべての手順を実施しています。その後

package com.remoting; 

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

サービスの実装

package com.remoting; 
public class AccountServiceImpl implements AccountService { 
    @Override 
    public int add(int a, int b) { 
     return a + b; 
    } 
} 

その後のweb.xml

<?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はapplicationContext.xmlに入れ、/WEB-INF/classesディレクトリ内にあるされています

インデックス:豆をロードして機能を呼び出すために、私は2つのJSPファイルを持っているサービスやヘルパークラスを呼び出すために今

<?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

<%@ 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

<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クラス

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はディレクトリ内に配置されます。私が間違っているつもりどこ

私に知らせてください。

+0

私は本当にあなたが実際のアプリケーションでそのコードを使用するつもりはありません願っています。あなたは、あなたがに実行したいない限り、基本的には、アプリケーション全体にあなたがそれを行うたびに再作成されます(Beanを必要とするという理由だけで、次のようにアプリケーション・コンテキストを再作成するべきではないJSPでJavaコードを置くべきではありませんメモリの問題、トランザクションの問題、奇妙な問題をデバッグする方法があります)。呼び出すURLは間違っているだけでなく、 'DispatcherServlet'のマッピングも間違っています。 –

答えて

0

私はそれが古い質問ですけど、今日はHttpInvokerClientInterceptorで発生した同じエラーにつまずきました。私の場合、原因はサーバーとクライアントが使用する2つの異なるJavaオブジェクトバージョンでした。 Spring's HTTP invokerはJavaオブジェクト(de)のシリアライゼーションを使用するため、サーバーとクライアントが同じバージョンのオブジェクト/クラスを使用していることを確認してください。

this questionを参照すると、同じserialVersionUIDと異なるクラスを使用することも意味します。

関連する問題