在 Java 1.8 中使用 XmlHolder 在运行时设置 SOAP 请求节点值

Setting SOAP request Node value at runtime using XmlHolder in Java 1.8

我正在开发一个自动化脚本,该脚本使用 SoapUI api classes 读取 wsdl 并在从 excel 文件动态填充数据后执行它。

我正在使用 XmlHolder class 来获取或设置 Soap 请求节点值,但我在使用 XmlHolder 的 XPath 访问请求 XML 节点时遇到问题。 以下是示例请求和我尝试过的代码:

//Soap 请求示例

<soapenv:Envelope     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/">
       <soapenv:Header/>
       <soapenv:Body>
          <web:ConversionRate>
             <web:FromCurrency>?</web:FromCurrency>
             <web:ToCurrency>?</web:ToCurrency>
          </web:ConversionRate>
       </soapenv:Body>
    </soapenv:Envelope>

      //code
     XmlHolder xmlHolder = null;
     try {
        xmlHolder = new XmlHolder(soapOperation.createRequest(true));
        } catch (XmlException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        };

        xmlHolder.declareNamespace("web","http://www.webserviceX.NET");

        // Here tagCell.getStringCellValue() = FromCurrency

        System.out.println("FromCurrency= " + request.getNodeValue(".//web:" + tagCell.getStringCellValue()));
        request.setNodeValue(".//web:" + tagCell.getStringCellValue() , valCell.getStringCellValue());

        //Other tried xPath
        //System.out.println("FromCurrency= " + request.getNodeValue("//web:" + tagCell.getStringCellValue()));
        //System.out.println("FromCurrency= " + request.getNodeValue("//:" + tagCell.getStringCellValue()));
        //System.out.println("FromCurrency= " + request.getNodeValue("//*:" + tagCell.getStringCellValue()));

任何人都可以建议 XmlHolder.setNodeValue() 的 xPath。

这里还要注意,Soap 节点有名称空间,即; <web:FromCurrency>

提前致谢

我的错。这是一个缺少罐子的问题。

此外,也无需使用 XmlHolder 指定任何命名空间。

现在的工作代码是:

//代码

XmlHolder xmlHolder = null;
 try {
    xmlHolder = new XmlHolder(soapOperation.createRequest(true));
    } catch (XmlException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    };

    // Here tagCell.getStringCellValue() = FromCurrency

    System.out.println("FromCurrency= " + request.getNodeValue("//*:" + tagCell.getStringCellValue()));
    request.setNodeValue("//*:" + tagCell.getStringCellValue() , valCell.getStringCellValue());

尽情享受