wsimport 跑完了,SOAP 调用还是需要代理。
配置 JAX-WS 代理访问时,把 WSDL 生成、运行时 WSDL 获取和 SOAP 调用分开看。
WSDL 下载好了,Java 类也生成了,但第一次 SOAP 调用依然出不了网络。生成器使用的代理选项属于生成器自身的运行过程。
Oracle JDK 8 的 wsimport 参考文档为这个工具有一个 HTTP 代理选项。它不是写进生成出来的服务类里的可移植指令。之后运行的应用可能用另一个 JVM、另一个账号和另一套 JAX-WS 实现。
先弄清楚是哪一步请求失败
| 阶段 | 需要检查的进程或组件 |
|---|---|
| 从 WSDL 与 import 生成类 | 构建工具或 wsimport 调用 |
| 构造服务时读取 WSDL | 应用的 WSDL 位置与运行时客户端 |
| 调用 SOAP 端点 | 选定的运行时传输层及其代理配置 |
中间这一步最容易被忽略。生成的服务可能仍然指向远程 WSDL。如果运行时在构造阶段就要取它,那么事后再配端口,对先前那次下载已经太晚。把需要的描述打包成应用资源,在实现支持的前提下可以去掉这层获取依赖。
某个实现里名为 ClientProxyFeature 的类并不会自动成为每个 JAX-WS 提供方的一部分。
代理凭据要和 SOAP 服务凭据分开。WSDL 下载成功甚至可以是匿名完成的,而操作端点却要求登录,反过来也一样。
记录失败的 URL 以及构造或调用停下的位置。这通常就能指出缺失的设置该放在哪里,不必再用一次生成相同类的方式试错。