2012-05-11 111 views
4

好吧,根本無法解決這個問題!HessianConnectionException:使用Hessian 4.0.7和Spring時出現(HTTP)500錯誤3.1.1

我使用Spring 3.1.1和4.0.7的Hessian部署到Tomcat 6.0.29

我創建了一個簡單的Hessian遠程接口,但我的測試保持與失敗;

Exception in thread "main" com.caucho.hessian.client.HessianConnectionException: 500: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/client/remote/RemoteService 
    at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:142) 
    at com.caucho.hessian.client.HessianProxy.sendRequest(HessianProxy.java:283) 
    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:170) 
    at $Proxy0.testConnection(Unknown Source) 
    at com.qualificationcheck.testserver.TestServer.main(TestServer.java:15) 
Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/client/remote/remoteservice 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:122) 
    ... 4 more 
Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/client/remote/RemoteService 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at java.net.HttpURLConnection.getResponseCode(Unknown Source) 
    at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:109) 
    ... 4 more 

我的界面是;

public interface QCClientRemoteService { 
    public String testConnection(String param); 
} 

我的impl是;

public class QCClientRemoteServiceImpl implements QCClientRemoteService { 
    public String testConnection(String param) { 
     return "Recieved param of >" + param + "< successfully."; 
    } 
} 

web.xml contains;

<servlet> 
    <servlet-name>remoting</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/config/web-app-config.xml</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>remoting</servlet-name> 
    <url-pattern>/remote/*</url-pattern> 
</servlet-mapping> 

您在那裏看到的web-app-config.xml包含(通過從另一個xml導入的方式);

<bean id="remoteService" class="com.example.QCClientRemoteServiceImpl"> 
    <!-- any additional properties, maybe a DAO? --> 
</bean> 

<bean name="/RemoteService" class="org.springframework.remoting.caucho.HessianServiceExporter"> 
    <property name="service" ref="remoteService"/> 
    <property name="serviceInterface" value="com.example.QCClientRemoteService"/> 
</bean> 

最後,一旦多數民衆贊成部署到Tomcat(始於沒有錯誤或警告),我打電話都從另一個測試應用程序與主要方法;

String url = "http://localhost:8080/client/remote/RemoteService"; 

HessianProxyFactory factory = new HessianProxyFactory(); 
QCClientRemoteService basic = (QCClientRemoteService) factory.create(QCClientRemoteService.class, url); 

System.out.println(basic.testConnection("Input 123")); 

任何想法,爲什麼這不起作用?非常令人沮喪! 以下人似乎有同樣的問題,但沒有從Caucho的答案; http://forum.caucho.com/showthread.php?t=14906

testapp肯定是到達webapp服務器,就好像我闖入了網址,然後testapp抱怨了一個不好的網址。但是,根本沒有日誌或警告,甚至沒有從服務器記錄調試。在實際的Impl之前,500被拋出某個地方!?

這一切的起腳是相同的代碼上面,集成到一個較舊的服務器,我們在春天2.0.5作品只是罰款麻布2.1.12

+0

具有相同的問題,hibernate3.0.8/tomcat6.0.32,但彈簧3.1.1。在Web瀏覽器中訪問端點會給出相應的響應,「HessianServiceExporter只支持POST請求」,但黑客客戶端會給出500錯誤。 – theZenPebble

回答

4

問題是我有一個包含spring-remoting 2.0.8的lib並且在某處發生了衝突(無聲)。立即刪除這個問題,解決了我的問題。

只是爲了明確上述配置和測試代碼完美工作,當我有以下libs(注意我並不是所有這些都需要Hessian/Spring解決方案,他們在我的項目中用於其他用途,但我已經這裏列出的完整性);

spring-core-3.1.1.RELEASE 
spring-asm-3.1.1.RELEASE 
spring-web-3.1.1.RELEASE 
spring-beans-3.1.1.RELEASE 
spring-context-3.1.1.RELEASE 
spring-aop-3.1.1.RELEASE 
spring-webmvc-3.1.1.RELEASE 
spring-context-support-3.1.1.RELEASE 
spring-expression-3.1.1.RELEASE 
hessian-4.0.7 
2

我的解決方案運行(黑森州嘗試各種版本的後)是使用:

org.springframework spring-remoting 2.0.8 
org.springframework spring-webmvc/orm/(whatever) 3.1.1.RELEASE 
com.caucho hessian 3.0.8 

我在Maven項目使用這些,所以這些都是我使用的是確切的版本,問題就消失了。它絕對是Spring 3.1.1的一個版本。

對於它的價值,我將它與Eclipse RCP應用程序一起使用,它可以與Eclipse RCP Hessian bundle一起使用。

+1

嘗試刪除那個spring-remoting lib,然後這個應該用最新的hessian 4.0.7。無論如何,爲我工作。似乎有一些非常微妙的衝突問題。 –

+0

我使用它與一個較舊的,不兼容的客戶端,所以我需要3.x,但很高興與4.x – theZenPebble