wsdl2java 如何访问 https 协议发布的 wsdl 该 wsdl 需要输入用户名密码才能访问
wsdl2java 如何访问 https 协议发布的 wsdl 该 wsdl 需要输入用户名密码才能访问
要使用 wsdl2java
访问要求用户名和密码的 HTTPS 协议发布的 WSDL,你可以按照以下步骤操作。
-
下载 WSDL 文件:
首先,需要手动下载 WSDL 文件。可以使用
curl
命令或其他下载工具,将用户名和密码传递给下载工具。例如:curl --user username:password -k -O <https://example.com/your_wsdl_path/your_wsdl_file.wsdl>
这将下载 WSDL 文件到当前目录。
-k
选项允许curl
与具有自签名证书的服务器进行交互。 -
运行
wsdl2java
:现在你可以使用下载的 WSDL 文件运行
wsdl2java
。例如:wsdl2java -d output_directory -client path/to/your_downloaded_wsdl_file.wsdl
其中,
output_directory
是生成 Java 代码的目标目录。 -
配置 Web 服务客户端以使用 HTTPS 和身份验证:
在生成的 Java 代码中,你需要配置 Web 服务客户端以使用 HTTPS 和身份验证。找到生成的客户端类,然后在创建代理时配置
BindingProvider
。例如:
YourService service = new YourService(); YourServicePortType port = service.getYourServicePort(); // Configure HTTPS and authentication BindingProvider bp = (BindingProvider) port; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "your_username"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "your_password"); // Now you can use the port to call the web service // ...
这样,就可以访问需要用户名和密码的 HTTPS 协议发布的 WSDL 了。请注意,生成的代码可能需要根据你的实际 Web 服务进行调整。
报错的处理
WSDLToJava Error: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsdl definition file:/E:/apache-cxf-3.4.2/bin/test.wsdl: WSDLException (at /WL5G3N0:definitions/WL5G3N0:types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing '<https://apidev.dfem.com.cn/WP_DFEM/APP_MOM_SERVICE/Proxy_Services/TA_SAP/MOM_E104_ProductOrderPoPkt_PS?SCHEMA%2FWP_DFEM%2FAPP_MOM_SERVICE%2FResources%2FWSDL%2FXSD_SYS_ERROR>'.: java.io.IOException: Server returned HTTP response code: 401 for URL: <https://apidev.dfem.com.cn/WP_DFEM/APP_MOM_SERVICE/Proxy_Services/TA_SAP/MOM_E104_ProductOrderPoPkt_PS?SCHEMA%2FWP_DFEM%2FAPP_MOM_SERVICE%2FResources%2FWSDL%2FXSD_SYS_ERROR>
从错误信息来看,服务器返回了 HTTP 401 响应代码,这意味着需要进行身份验证。在这种情况下,您需要先下载 WSDL 文件以及所有相关的 XSD 文件,然后使用本地文件运行
wsdl2java
。-
下载 WSDL 和 XSD 文件:
首先,使用
curl
或其他下载工具下载 WSDL 文件和相关的 XSD 文件。将用户名和密码传递给下载工具。例如:curl --user username:password -k -O <https://apidev.dfem.com.cn/WP_DFEM/APP_MOM_SERVICE/Proxy_Services/TA_SAP/MOM_E104_ProductOrderPoPkt_PS?WSDL> curl --user username:password -k -O <https://apidev.dfem.com.cn/WP_DFEM/APP_MOM_SERVICE/Proxy_Services/TA_SAP/MOM_E104_ProductOrderPoPkt_PS?SCHEMA%2FWP_DFEM%2FAPP_MOM_SERVICE%2FResources%2FWSDL%2FXSD_SYS_ERROR>
请确保下载所有相关的 XSD 文件。
-
修改 WSDL 文件:
打开下载的 WSDL 文件,并找到引用 XSD 文件的部分。将引用的 URL 替换为本地 XSD 文件的路径。例如:
<xsd:import namespace="<http://www.example.com/your_namespace>" schemaLocation="path/to/your_downloaded_xsd_file.xsd"/>
- 运行
wsdl2java
:使用修改后的 WSDL 文件和本地 XSD 文件运行
wsdl2java
。例如:wsdl2java -d output_directory -client path/to/your_modified_wsdl_file.wsdl
其中,
output_directory
是生成 Java 代码的目标目录。
这样,你就可以避免在解析 WSDL 和 XSD 文件时遇到 401 错误。
-