繁体   English   中英

XML到SOAP服务

[英]XML to SOAP service

我正在创建一个Java服务,该服务将采用入站XML,对来自XML的某些数据应用一些业务逻辑,并使用XML中的此数据和原始数据调用SOAP服务。

我有一个出站SOAP服务的入站请求XML和WSDL的样本。

我的计划是:

  1. 使用XMLSpy从样本入站XML生成XSD。
  2. 使用maven-jaxb2-plugin从XSD生成Java类。
  3. 将入站XML解组到JAXB对象。
  4. 从JAXB对象提取数据,对其中一些应用业务逻辑。
  5. 通过使用带有cxf-codegen-plugin的SOAP WSDL文档来生成SOAP客户端。
  6. 用数据调用SOAP客户端。

在这里,我正在阅读有关使用XSLT的信息: xml-to-soap-transformation

我可以正确地完成此任务吗? XSLT应该成为我的实现的一部分吗?

谢谢!

更新:

出站SOAP服务是“文档样式”,WSDL包括XSD模式。

该项目使用Spring框架。

生成的代码如下所示:

@WebServiceClient(name = "OrderService", 
                  wsdlLocation = "file:/C:/......./src/main/resources/wsdl/OrderService.wsdl",
                  targetNamespace = "http://xmlns.some_name_space") 
public class OrderService extends Service {


@WebService(targetNamespace = "http://xmlns.some_name_space", name = "OrderPortType")
@XmlSeeAlso({org.....ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface OrderPortType {

生成的客户端:

QName SERVICE_NAME = new QName("http://xmlns......", "OrderService");
URL wsdlURL = OrderService.WSDL_LOCATION;
OrderService ss = new OrderService(wsdlURL, SERVICE_NAME);
OrderPortType port = ss.getOrder();  
CancelOrderType cancelOrderMessage = null;
CancelAcknowledgeOrderType cancelOrderReturn = port.cancelOrder(cancelOrderMessage);
ProcessOrderType processOrderMessage = null;
AcknowledgeOrderType processOrderReturn = port.processOrder(processOrderMessage);

将XSLT仅仅用作SOAP通信的有效负载听起来是错误的。 有效载荷不应被信封材料所困扰。

首先看一下WSDL。 现代Web服务通常不再是文档类型 ,因此您可以跳过步骤1.-4。

我的客户通常会经历:

  1. 使用cxf-codegen生成SOAP客户端实现

     <extraarg>-client</extraarg> <extraarg>-impl</extraarg> 
  2. 通过扩展ServiceName_Service类,获取其端口对象,然后仅调用WSDL中定义的方法之一,来生成测试客户端实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM