【问题标题】:JAX-WS issuing GET then GET and POSTJAX-WS 发出 GET 然后 GET 和 POST
【发布时间】:2013-05-09 13:12:29
【问题描述】:

我编写了一个 JAX-WS 客户端,使用从 wsimport 生成的类来调用 Web 服务。为了在本地测试我的客户端,我编写了 Web 服务的实现并将其发布到本地并调用它。一切都按预期进行。

我注意到的一件事是,我的客户端连接到端点并发出 GET,然后发出另一个与 GET 的连接,该连接针对寻找 wsdl 的端点,最后在同一连接中使用我的有效负载发出 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。

【问题讨论】:

    标签: java web-services jakarta-ee jax-ws


    【解决方案1】:

    客户端没有在本地缓存 wsdl 文件,因此您会在每次 POST 之前看到一个 GET 请求。 GET 用于获取 wsdl 文件,POST 用于实际的 Web 服务请求。要求客户端在本地缓存wsdl并引用它。

    【讨论】:

    • 这是有道理的,可以解释第二个 GET。对第一个有什么想法吗?
    • 你确实是对的。谢谢!它同时发出GETs 寻找wsdl。 RuntimeWSDLParser.parse(...) 文档说:解析 WSDL 并给出 WSDLModel。如果 wsdl 参数为空,则使用 wsdlLoc 来获取 WSDL。如果无法获取 WSDL 文档,则尝试 com.sun.xml.internal.ws.api.wsdl.parser.MetadataResolverFactory 获取 WSDL 文档,如果未找到,则作为最后一个选项,如果 wsdlLoc 没有 '?wsdl ' 作为查询参数,然后通过附加 '?wsdl' 来尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多