我正在使用 JAX-WS 标准的东西wsimport http://localhost/Order.wsdl
来生成客户端存根类。
实时 Web 服务位于不同的主机上,因此我需要在进行服务调用时提供一个 url。到目前为止,我的方法是这样的(下面的类是从 wsimport 生成的):
1. OrderService s = new OrderService (
new URL("https://live/WS/Order"),
new QName(...));
2. OrderServicePort port = s.getOrderServicePort();
3. configureHttpCertificatesStuff(port) // Set up ssl stuff with the port
4. port.placeOrder(args); // The actual ws call
第一:这是指定网址的正确方法吗?
第二:似乎第 1 行中的构造函数实际上对新 URL进行了网络调用!这会导致异常(由于未配置 https),因此我永远不会进入下一行。
背景:我正在实施此问题中概述的双向 ssl 身份验证。这意味着我需要在port
服务调用之前配置 ssl 的东西。由于明显的原因,在正确配置 ssl 层之前,我无法让构造函数建立任何连接......
更新:
显然,url 指向 WSDL,而不是使用 jax-ws 标准时的端点。这让我绊倒了。直接从文件加载 WSDL 解决了这个问题。
设置端点 url 是这样完成的:
BindingProvider b = (BindingProvider) port;
b.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointUrl);