【问题标题】:XML to SOAP serviceXML 到 SOAP 服务
【发布时间】:2016-10-14 01:58:29
【问题描述】:

我正在创建一个 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);

【问题讨论】:

    标签: java xml xslt soap jaxb


    【解决方案1】:

    将 XSLT 用于 SOAP 通信的负载听起来是错误的。有效载荷不应该被信封的东西所困扰。

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

    我的客户通常会经历:

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

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

    【讨论】:

    • 我确实修复了原始帖子中的链接。
    • 我们使用文档样式。 WSDL 包括 XSD 模式。
    • 那么当你让maven插件生成代码时会发生什么?你得到一个 RPC 风格的 API 还是只是一个 get-/setDocument?
    • 我不知道它是RPC还是文档样式生成的客户端。
    • 我应该提到我们也使用 Spring。我不确定这是否有什么不同。
    猜你喜欢
    • 2012-11-03
    • 2013-03-18
    • 2014-01-13
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多