春天远程; JdkDynamicAopProxy没有方法

时间:2016-01-22 14:32:07

标签: java spring web-services spring-mvc soap

一些背景故事:我正在建立旧(呃)系统的测试环境(2008)。系统目前处于工作状态,但我们需要在升级之前开始测试。有一个前端代理应用程序通过Spring(2.5.4)HTTP调用与后端应用程序进行交互。

我有源代码和Spring相关的依赖项,我可以通过源代码附带的构建脚本编译系统。我已经设置了一个本地虚拟机作为我的后端,并且应用程序在两侧的JBoss(4.2.2)上部署并运行。

我能够向代理运行Soap请求,身份验证正在运行,所以一切似乎都是正确的。

现在,当我尝试访问我的服务器服务时,通过HTTP调用的应用程序之间的通信不起作用。

这是我在服务器端的设置:

这会创建一个包含所有相关服务的bean

<bean id="onlineService" class="my.own.class.OnlineService">
    <property name="orderService" ref="orderService" />
    <property name="invalidateService" ref="invalidateService" />
    <property name="checkStatusService" ref="checkStatusService" />
</bean>

使用http调用者公开服务

<bean name="onlineServiceHttp"
    class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
    <property name="service" ref="onlineService" />
    <property name="serviceInterface" value="my.own.interface.OnlineServiceI" />
</bean>
<bean id="simpleUrlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/onlineServiceHttp">onlineServiceHttp</prop>
        </props>
    </property>
</bean> 

这是我的客户端设置:

<!--  Online Service using HTTP Invoker -->
<bean id="onlineservice"
    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceUrl"
        value="http://${ONLINE_SERVICES_HOST}:8080/vmosvcs/vmoservice/onlineServiceHttp" />
    <property name="serviceInterface" value="my.own.interface.OnlineServiceI" />
</bean>

最后,在我的客户端(代理应用程序)上通过Soap创建我的bean目标

<bean id="orderMarshallEndpoint" class="my.proxy.endpoints.OrderMarshallEndpoint">
    <property name="service" ref="onlineservice" />
</bean>
<bean id="invalidateMarshallEndpoint" class="my.proxy.endpoints.InvalidateMarshallEndpoint">
    <property name="service" ref="onlineservice" />
</bean>
<bean id="checkStatusMarshallEndpoint" class="my.proxy.endpoints.CheckStatusMarshallEndpoint">
    <property name="service" ref="onlineservice" />
</bean>

当我向例如checkStatusMarshallEndpoint发送Soap请求时,我在客户端上收到以下错误:

CustomAuthenticationManager 16 -----New Request in Proxy ----- 
CustomAuthenticationManager 17 Request sent by username :peter: 
CustomAuthenticationManager 19 Authentication Result:true: 
CheckStatusMarshallEndpoint 22 Check Status request received 
OnlineEndpoint 52 The authenticated partnerId is :imran 
CheckStatusMarshallEndpoint 27 The request is :: serial Number :null: activation Code :[PROTECTED]::imran 

CustomSoapFaultMappingExceptionResolver 28 org.springframework.remoting.RemoteInvocationFailureException: 
Invocation of method [public abstract RmiDataTransferObject OnlineServiceI.getServed(...,...)] 
failed in HTTP invoker remote service at [http://{ONLINE_SERVICE_HOST}:8080/vmosvcs/vmoservice/onlineServiceHttp]; 
nested exception is java.lang.NoSuchMethodException: com.sun.proxy.$Proxy76.getServed(..., ...)

在这个地方

RmiDataTransferObject resp = service.getServed(getRequest(csr), OnlineServiceI.CHECK_STATUS_SERVICE);

其中RmiDataTransferObject getServed(...,...)是my.own.interface.OnlineServiceI的一部分。如果我调试执行,有一个JdkDynamicAopProxy声明正确的HTTP路径,但它没有注册方法。只有预期的界面。

我可能会缺少什么?如果我在浏览器中尝试HTTP URL,我会得到一个500,表示路径是正确的(某些东西映射到该地址)。

0 个答案:

没有答案