我使用从wsimport生成的类编写了一个JAX-WS客户端来调用Web服务。为了在本地测试我的客户端,我编写了该Web服务的实现并将其发布到本地并进行调用。一切都按预期进行。
我注意到的一件事是,我的客户端连接到端点,并向端点发出GET,然后再与另一个连接对着wsdl的端点进行GET连接,最后在同一连接中发出带有有效负载的POST。
这是tcpmon输出(已编辑以保护罪行):
GET /someWS HTTP/1.1
User-Agent: Java/1.7.0_03
Host: 127.0.0.1:9877
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
----------------------------------
GET /someWS?wsdl HTTP/1.1
User-Agent: Java/1.7.0_03
Host: 127.0.0.1:9877
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
POST /someWS HTTP/1.1
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "document/http://someUrl"
User-Agent: JAX-WS RI 2.2.4-b01
Host: 127.0.0.1:9877
Connection: keep-alive
Content-Length: 610
<Valid Soap message here/>
这是标准行为还是我搞砸了?我正在使用JAX-WS RI 2.2。这在本地可以正常工作,但是某个生产WS对初始的GET请求非常不满意,并抛出500,我希望我可以抑制GET请求,而直接跳到POST。
最佳答案
客户端未在本地缓存wsdl文件,因此您将在每次POST之前看到GET请求。 GET用于获取wsdl文件,而POST用于实际的Web服务请求。要求客户端在本地缓存wsdl并引用它。