在 Java 中创建带有子节点的 SOAP 消息
Creating SOAP message with child node in Java
我想将数据发送到 Iava 中的 SOAP 服务。
My IDE - Intellij Ultimate 自动生成了两个主要的 classes 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(".00");
SetSaleRequest request = new SetSaleRequest();
SetSaleResponse response = new SetSaleResponse();
request.setSale(sale);
SaleService saleService = new SaleService();
ISaleService isaleService = saleService.getWSHttpBindingIISRService();
isaleService.setSale(request);
然而,尽管 XML 中的 Item 是 setSalesRequest 的子项,但没有公开添加 Item 的方法。
我想我必须使用 ObjectFactory(这是从 WDSL 自动生成的另一个 class)。
如何向此请求添加项目?
由 JAXB 生成的 类 处理元素列表,以便它们提供 getter 来访问列表,而不是直接的 addXYZ()
方法。在您的情况下,将项目添加到 SetSaleRequest
的语法变为(有点违反直觉):
request.getItems().add(item);
我想将数据发送到 Iava 中的 SOAP 服务。
My IDE - Intellij Ultimate 自动生成了两个主要的 classes 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(".00");
SetSaleRequest request = new SetSaleRequest();
SetSaleResponse response = new SetSaleResponse();
request.setSale(sale);
SaleService saleService = new SaleService();
ISaleService isaleService = saleService.getWSHttpBindingIISRService();
isaleService.setSale(request);
然而,尽管 XML 中的 Item 是 setSalesRequest 的子项,但没有公开添加 Item 的方法。
我想我必须使用 ObjectFactory(这是从 WDSL 自动生成的另一个 class)。
如何向此请求添加项目?
类 处理元素列表,以便它们提供 getter 来访问列表,而不是直接的 addXYZ()
方法。在您的情况下,将项目添加到 SetSaleRequest
的语法变为(有点违反直觉):
request.getItems().add(item);