问题描述
我想为 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