wsdl2java 如何访问 https 协议发布的 wsdl 该 wsdl 需要输入用户名密码才能访问

wsdl2java 如何访问 https 协议发布的 wsdl 该 wsdl 需要输入用户名密码才能访问

要使用 wsdl2java 访问要求用户名和密码的 HTTPS 协议发布的 WSDL,你可以按照以下步骤操作。

  1. 下载 WSDL 文件:

    首先,需要手动下载 WSDL 文件。可以使用 curl 命令或其他下载工具,将用户名和密码传递给下载工具。例如:

    curl --user username:password -k -O <https://example.com/your_wsdl_path/your_wsdl_file.wsdl>

    这将下载 WSDL 文件到当前目录。-k 选项允许 curl 与具有自签名证书的服务器进行交互。

  2. 运行 wsdl2java

    现在你可以使用下载的 WSDL 文件运行 wsdl2java。例如:

    wsdl2java -d output_directory -client path/to/your_downloaded_wsdl_file.wsdl

    其中,output_directory 是生成 Java 代码的目标目录。

  3. 配置 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

    1. 下载 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 文件。

    2. 修改 WSDL 文件:

      打开下载的 WSDL 文件,并找到引用 XSD 文件的部分。将引用的 URL 替换为本地 XSD 文件的路径。例如:

      <xsd:import namespace="<http://www.example.com/your_namespace>" schemaLocation="path/to/your_downloaded_xsd_file.xsd"/>

    3. 运行 wsdl2java

      使用修改后的 WSDL 文件和本地 XSD 文件运行 wsdl2java。例如:

      wsdl2java -d output_directory -client path/to/your_modified_wsdl_file.wsdl

      其中,output_directory 是生成 Java 代码的目标目录。

    这样,你就可以避免在解析 WSDL 和 XSD 文件时遇到 401 错误。