2016-07-10 5 views
0

Ich habe für die letzten zwei Tage kämpfen, um einen Dienst mit HttpInvokerServiceExporter verfügbar machen. Der Fehler sagt Did not receive successful HTTP response Die vollständige Stapelüberwachung ist unten für Details. Der Code wird in Git Repo überprüft. Link - Github linkVerwenden von HttpInvokerServiceExporter geben 500 Fehlercode

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) 

ich die Dokumentation korrekt befolgt haben und alle Schritte umgesetzt. Im Folgenden finden Sie die Service-Schnittstelle:

package com.remoting; 

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

die Service-Implementierung Dann

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

Dann wird der 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> 

dann die Anwendung Bohnen. Die Anwendung Bohnen werden in applicationContext.xml platziert und befindet sich innerhalb des /WEB-INF/classes Verzeichnis:

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

nun den Dienst Ich habe zwei jsp Dateien und eine Hilfsklasse aufzurufen, um die Bohnen zu laden und rufen Sie die Funktion:

Index.

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)); 
%> 

Schließlich wird die ClientInvoker Klasse

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); 
    } 
} 

Die applicationContext.xml ist im Inneren des /WEB-INF/classes Verzeichnis abgelegt.

Bitte lassen Sie mich wissen, wo ich falsch liege.

+0

Ich hoffe wirklich, dass Sie diesen Code nicht in einer tatsächlichen Anwendung verwenden werden. Sie sollten keinen Java-Code in einer JSP platzieren, daneben sollten Sie den Anwendungskontext nicht einfach neu erstellen, nur weil Sie eine Bean benötigen (im Grunde erstellen Sie jedes Mal die gesamte Anwendung neu, wenn Sie das nicht tun Speicherprobleme, Transaktionsprobleme, seltsam zu debuggen Probleme, die der Weg ist). Die von Ihnen aufgerufene URL ist falsch, ebenso wie die Zuordnung Ihres 'DispatcherServlet'. –

Antwort

0

Ich weiß, es ist eine alte Frage, aber heute stolperte ich über den gleichen Fehler in HttpInvokerClientInterceptor aufgetreten. In meinem Fall waren das zwei verschiedene Java-Objektversionen, die vom Server und vom Client verwendet wurden. Da Spring's HTTP invoker die Serialisierung von Java-Objekten (de) verwendet, stellen Sie sicher, dass Server und Client dieselbe Version der Objekte/Klassen verwenden.

Bezug nehmend auf this question, kann es auch bedeuten, nur serialVersionUID und verschiedene Klassen zu verwenden.

Verwandte Themen