java - 在 Java 中创建带有子节点的 SOAP 消息

标签 java web-services soap xsd jax-ws

我想将数据发送到 Iava 中的 SOAP 服务。

我的 IDE - Intellij Ultimate 已自动生成两个主要类 Sale 和 Item,以及 ObjectFactory、SetSaleRequest、SetSaleResponse。我已经能够创建一个 Sale 实例,但无法了解如何添加子项目。

XML

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:typ="urn:some.com.au/schema/common/types">
   <soap:Header/>
   <soap:Body>
      <typ:setSalesRequest>
         <!--Optional:-->
         <typ:Sale>
            <!--Optional:-->
            <typ:Table>?</typ:Table>
            <!--Optional:-->
            <typ:SalesNo>?</typ:SalesNo>
            <typ:EnteredDateTime>2017-12-17T11:02:00.000+12:00</typ:EnteredateTime>
            <typ:SaleDateTime>?</typ:SaleDateTime>
            <!--Optional:-->
            <typ:Address>?</typ:Address>
            <typ:Summary>?</typ:Summary>
         </typ:Sale>
         <!--Zero or more repetitions:-->
         <typ:Item>
            <!--Optional:-->
            <typ:ItemCode>?</typ:ItemCode>
            <!--Optional:-->
            <typ:ItemDesc>?</typ:ItemDesc>
            <!--Optional:-->
            <typ:ItemCost>?</typ:IetmCost>
         </typ:Item>
      </typ:setSalesRequest>
   </soap:Body>
</soap:Envelope>

到目前为止的代码:

    // SALE
    Sale sale = new Sale();
    sale.setTable("East");
    ...
    sale.setSalesNo("INV001");

    // ITEM
    Item item = new Item();
    item.setItemCode("ABC123");
    ...
    item.setItemCost("$12.00");

    SetSaleRequest request = new SetSaleRequest();
    SetSaleResponse response = new SetSaleResponse();
    request.setSale(sale);
    SaleService saleService = new SaleService();
    ISaleService isaleService = saleService.getWSHttpBindingIISRService();
    isaleService.setSale(request);

然而,尽管 Item 是 XML 中 setSalesRequest 的子项,但没有公开用于添加 Item 的方法。

我想我必须使用ObjectFactory(这是从WDSL 自动生成的另一个类)。

如何向此请求添加项目?

最佳答案

JAXB 生成的类处理元素列表,以便它们提供用于访问列表的 getter,而不是直接的 addXYZ() 方法。在您的情况下,将项目添加到 SetSaleRequest 的语法将变为(有点违反直觉):

request.getItems().add(item);

关于java - 在 Java 中创建带有子节点的 SOAP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47852885/

相关文章:

asp.net - ServiceStack - 返回类时为空 json

web-services - HTTP 上的 XML 和 HTTP 上的 SOAP 之间的区别

javascript - 类型错误 : Cannot read property 'indexOf' of undefined in Nodejs

perl - 如何使用 OTRS 6 中的通用接口(interface)获取用户相关数据?

java - Java 中的 System.gc() 和 finalize() 方法有什么区别?

java - 在 Java 中按值而不是引用添加到列表

java - 在java中执行lua脚本

java - 有没有办法让 JSF 与通用 setter 和 getter 一起工作

web-services - 如何删除我的网站的应用程序上下文?

php - 为什么 $_SERVER ["PHP_AUTH_USER"] 和 $_SERVER ["PHP_AUTH_PW"] 没有设置?