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.
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'. –