javax.xml.ws.WebServiceException: close 方法已被调用

问题描述

我想为 WebService 实现一个客户端。我使用 IntelliJ 工具从 wsdl 创建类,并根据需要准备了从 WebService 接口调用方法的所有类。问题是每次我尝试调用 WebService 方法时都会收到此错误

javax.xml.ws.WebServiceException: close method has already been invoked
    at com.sun.xml.ws.client.Stub.process(Stub.java:316)
    at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161)
    at com.sun.xml.ws.client.sei.SyncmethodHandler.invoke(SyncmethodHandler.java:113)
    at com.sun.xml.ws.client.sei.SyncmethodHandler.invoke(SyncmethodHandler.java:93)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144)
    at com.sun.proxy.$Proxy163.test(UnkNown Source)
    at com.webapp.svc.ws.client.omscentraldatasending.OmsCentralDataSendingWsClient.test(OmsCentralDataSendingWsClient.java:58)

我在 SoapUI 上运行了一个模拟,我从 SoapUI 发送了一个请求并且它正在工作。

通过按下网页中的按钮开始测试 WebService。这是我在上下文中初始化 bean 的方式:

<bean id="omsCentralDataSendingSvc" class="com.bean.omscentraldatasending.OmsCentralDataSendingSvc">
    <constructor-arg value="classpath:/meta-inf/wsdl/omscentraldatasending/OmsCentralDataSendingSvc.wsdl"/>
</bean>

<bean id="omsCentralDataSendingTest" class="com.webapp.web.adm.omscentraldatasendingtest.OmsCentralDataSendingTest" scope="request">
    <property name="omsCentralDataSendingClient">
        <bean class="com.webapp.svc.ws.client.omscentraldatasending.OmsCentralDataSendingWsClient" init-method="init">
            <property name="webServicePort">
                <bean factory-bean="omsCentralDataSendingSvc" factory-method="getomsCentralDataSendingEndpoint" />
            </property>
            <property name="endpointAddress" value="http://localhost:9520/OmsCentralDataSendingSvc/"/>
        </bean>
    </property>
</bean>

我意识到在某个时刻调用com.sun.xml.ws.client.Stub#close 方法,这就是为什么稍后会发生错误,但我不知道为什么调用close 方法。 如果您需要任何其他信息,请告诉我。

解决方法

显然问题出在初始化 bean 上。我移动了嵌套 bean 并将其设置为顶级,现在可以正常工作了。

bananafruit