获取org.springframework.remoting.RemoteAccessException:一个接一个地打几个电话时无法访问远程服务?

时间:2014-06-12 16:57:34

标签: java spring web-services java-ee malformedurlexception

我正在使用weblogic工作管理器从我的webservice调用一个调用外部websservice的EJB(在同一个耳朵内)。

如果我拨打1个电话,它总能完美运行,所以我知道设置是正确的,可以调用服务......

但是一旦我向它添加另一个调用,它有时会失败(从EJB到Web服务),EJB上的这个异常到外部Web服务调用(我向工作管理器添加的调用越多)更多它失败了)

org.springframework.remoting.RemoteAccessException: Could not access remote service [SomeServicePort]; nested exception is java.net.MalformedURLException
    at org.springframework.remoting.rmi.RmiClientInterceptorUtils.convertRmiAccessException(RmiClientInterceptorUtils.java:190)
    at org.springframework.remoting.jaxrpc.JaxRpcPortClientInterceptor.handleRemoteException(JaxRpcPortClientInterceptor.java:737)
    at org.springframework.remoting.jaxrpc.JaxRpcPortClientInterceptor.doInvoke(JaxRpcPortClientInterceptor.java:595)
    at org.springframework.remoting.jaxrpc.JaxRpcPortClientInterceptor.invoke(JaxRpcPortClientInterceptor.java:562)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy112.obtainClinicalCode(Unknown Source)
    ...
Caused by: java.net.MalformedURLException
    at java.net.URL.<init>(URL.java:601)
    at java.net.URL.<init>(URL.java:464)
    at java.net.URL.<init>(URL.java:413)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:133)
    ... 

我的服务在我的应用程序上下文中的Spring(2.5)中配置如下

<bean id="MyService"
        class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean"
        lazy-init="true" scope="prototype">
        <property name="serviceFactoryClass">
            <value>org.apache.axis.client.ServiceFactory</value>
        </property>
        <property name="wsdlDocumentUrl">
            <value>myWSDLPath...</value>
        </property>
        <property name="namespaceUri">
            <value>com.controller</value>
        </property>
        <property name="serviceName">
            <value>Mine</value>
        </property>
        <property name="portName">
            <value>MinePort</value>
        </property>
        <property name="portInterface">
            <value>com.MineServiceRemote</value>
        </property>
        <property name="serviceInterface">
            <value>com.MineService</value>
        </property>
        <property name="lookupServiceOnStartup" value="false" />
    </bean>

我正在使用Java 5和Weblogic 10.我在从EJB调用外部Web服务之前和之后添加了日志记录:我可以看到通过工作管理器对EJB进行了多次调用。但是在EJB内部似乎抛出异常。只是为了隔离workmanager设置是否有任何问题,但似乎没问题。

问题似乎在于EJB调用外部Web服务。

为什么我会在并发呼叫时收到此错误,但一次不会收到1错误?

1 个答案:

答案 0 :(得分:0)

问题在于我的bean在spring config中被定义了。

不是像我那样定义它,而是将WSDL保存到我的项目中,并使用我的POM中定义的WSDL2Code为我生成存根

<plugin>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
    <version>1.5.4</version>
    <executions>
        <execution>
            <id>myWebService</id>
            <goals>
                <goal>wsdl2code</goal>
            </goals>
            <configuration>
                <packageName>PackageWhereIWantTheCodeToBeGeneratedTo</packageName>
                <wsdlFile>${project.basedir}/src/main/resources/pathToWhereMyWsdlIsSavedInMyProject</wsdlFile>
                <databindingName>jaxbri</databindingName>
                <syncMode>sync</syncMode>
                <generateTestcase>false</generateTestcase>
            </configuration>
        </execution>

    </executions>
    <dependencies>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-jaxbri</artifactId>
            <version>1.5.4</version>
        </dependency>
    </dependencies>
</plugin>

然后在我的代码中,我创建了一个新存根并调用为我生成的方法