java - 如何将参数添加到 SOAP URL 并在服务端检索它们

标签 java jax-ws

我正在使用 jaxws-rt 并构建了 WSDL 并创建了所有 Web 服务。一切正常,但我想知道是否有办法查看是否有更多参数被标记到 Web 服务的 URL 上。

最佳答案

作为 Web 服务提供者,您可以通过 MessageContext 中的 HttpServletRequest 访问 SOAP 客户端使用的查询字符串:

package org.example.sampleservice;

import javax.annotation.Resource;
import javax.jws.HandlerChain;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@WebService(endpointInterface = "org.example.sampleservice.SampleService")
public class SampleServiceImpl implements SampleService {

    @Resource
    private WebServiceContext ctx;

    @Override
    public String sayHello(String name) {
        HttpServletRequest request = (HttpServletRequest) ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST);

        String result = String.format("Hello, %s (invoked with endpoint query parameters %s)", name,
                request.getQueryString() == null ? "[no endpoint URL query parameters found]"
                        : request.getQueryString());
        return result;
    }

}

您可以像我上面那样将查询字符串作为一个字符串获取 (request.getQueryString()) 或通过其他标准 HttpServletRequest 方法:

此类的示例 soap 客户端:

package org.example.consumer;

import java.net.URL;

import javax.xml.ws.BindingProvider;

import org.example.sampleservice.SampleService;
import org.example.sampleservice.SampleServiceImplService;

public class SayHelloClientApp {

    public static void main(String[] args) throws Exception {
        URL wsdlLoc = new URL("http://localhost:8081/samplews/sample?WSDL");
        SampleServiceImplService svc = new SampleServiceImplService(wsdlLoc);
        SampleService port = svc.getSampleServiceImplPort();

        BindingProvider bp = (BindingProvider) port;
        String endpointURL = "http://localhost:8081/samplews/sample?a=1&b=2&c=3";
        bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);

        String result = port.sayHello("java");
        System.out.println(String.format("Result:\n%s", result));
    }

}

打印

结果: 你好,java(使用端点查询参数 a=1&b=2&c=3 调用)

关于java - 如何将参数添加到 SOAP URL 并在服务端检索它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248549/

相关文章:

java - 通过单击列表上的项目填充文本区域

java - REST - 如何使用 Jersey 传递一个 long in 参数数组?

java - 使用现有的 http 客户端进行 SOAP 调用

caching - 如何在 Java 中缓存 JAX-WS stub /端口?

java - 从 cron 作业调用 REST Web 服务

java - 如何仅使用 JDK 支持的类生成自签名证书?

java - 如何修复 Google 移动广告集成错误

java - 具有多个 wsdl 文件的 JAX-WS wsimport

java - 从远程计算机使用 Web 服务

java - SSH 与 JSch 用于具有中间输出的多个命令