当SOAPAction HTTP头为空时,jaxws-ri如何路由SOAP请求至正确方法?
JAX-WS RI 2.3.2 空SOAPAction时的请求路由机制
当SOAPAction HTTP头为空字符串时,jaxws-ri 2.3.2不会依赖这个头来路由请求,而是通过解析SOAP请求体的核心内容匹配对应的服务方法,具体逻辑如下:
- 提取SOAP请求体的操作元素:每个SOAP请求的
<soap:Body>内部,都会包含对应Web方法的根XML元素——比如调用validateCard时,请求体里会出现带目标命名空间的<validateCard>节点。框架会提取这个元素的本地名称+命名空间作为匹配标识。 - 匹配服务类的注解元数据:你编写的
Test类中,每个标注@WebMethod的方法都会和WSDL操作绑定。如果没手动指定@WebMethod的operationName属性,默认用方法名作为操作名称;再结合@WebService的targetNamespace,就构成了该方法对应的XML元素标识。JAX-WS RI会把请求体的元素信息和这些元数据逐一比对,找到匹配的方法。 - 重载方法的额外校验:如果服务类有同名重载方法,框架还会进一步校验请求参数的数量、类型,以及参数对应的XML元素名称,确保路由到正确的重载方法。
补充说明:SOAPAction头最初是为了让HTTP服务器无需解析请求体就能快速路由而设计,但JAX-WS规范明确允许SOAPAction为空,此时必须通过解析请求体确定目标方法——这是jaxws-ri遵循规范的标准行为。
内容的提问来源于stack exchange,提问作者Stephan van Hoof
相关产品推荐
相关产品推荐

