Получение исключения org.springframework.remoting.RemoteAccessException: не удалось получить доступ к удаленной службе при выполнении нескольких вызовов один за другим?

Я использую менеджеры работы weblogic для вызова из моего веб-сервиса EJB (в том же ухе), который вызывает внешний веб-сервис.

Если я делаю 1 вызов, он всегда работает отлично, поэтому я знаю, что настройка правильная для вызова службы...

Но как только я добавляю к нему еще один вызов (вызовы), он иногда терпит неудачу (от EJB к веб-службе) с этим исключением для вызова EJB к внешней веб-службе (чем больше вызовов я добавляю к диспетчерам работ, тем больше он терпит неудачу )

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: я вижу, что в EJB делается несколько вызовов через workmanagers. Но внутри EJB, похоже, выдается исключение. Просто чтобы изолировать, если что-то не так с настройкой workmanager, но, похоже, все в порядке.

Проблема, похоже, заключается в том, что EJB делает вызов внешней веб-службы.

Почему я получаю эту ошибку для одновременных вызовов, а не для одного за раз?


person Chrispie    schedule 12.06.2014    source источник


Ответы (1)


Проблема заключалась в том, что мой bean-компонент был определен в конфигурации spring.

Вместо того, чтобы определять его таким образом, я сохранил WSDL в своем проекте и использовал WSDL2Code, определенный в моем POM, для создания заглушки для меня.

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

Затем в своем коде я создаю новую заглушку и вызываю сгенерированные для меня методы.

person Chrispie    schedule 13.06.2014