javax.xml.ws.WebServiceException: 关闭方法已经被调用

javax.xml.ws.WebServiceException: close method has already been invoked

我想为 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 并将其设为顶层,现在可以正常工作了。

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

<bean id="newBean" 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>

<bean id="omsCentralDataSendingTest" class="com.webapp.web.adm.omscentraldatasendingtest.OmsCentralDataSendingTest" scope="request">
    <property name="omsCentralDataSendingClient" ref="newBean">
</bean>