【问题标题】:Sending XML over HTTP in a simple, neutral way以简单、中立的方式通过 HTTP 发送 XML
【发布时间】:2009-12-14 18:20:46
【问题描述】:

我们有一些独立的设备会通过 HTTP 将 XML 消息发送到任意处理软件(可能由我们开发,可能是第 3 方)。消息相对简单,并且符合现有模式。无需具体回复。

我突然发现自己迷失在网络服务技术术语的世界中。我想要以下内容:

  1. 使设备尽可能简单,并且不依赖于任何特定技术,例如 SOAP(除非它是有益的)。
  2. 尽可能简单地使用消息。例如,我可以只通过 HTTP 发送 XML,但接收者必须手动处理消息(我认为)。如果有人可以使用类似 WSDL 的工具轻松创建任何语言的消费者,那就太好了。

请帮助填补我理解中的巨大空白……并为我指明正确的方向。谢谢!

更新:我应该让自己更清楚一点。我不反对使用任何“技术”,我只是在寻求建议以取得良好的平衡。独立设备的功能非常有限,但足以通过 HTTP 发送 XML 消息——我不想让这些事情变得复杂。

然后我当然可以直接使用并手动处理 XML 消息......但是如果有一种方法可以生成此代码(我可以从 WSDL 生成代码的方式),那就太好了。我得到的是一个描述消息本身的 .xsd,仅此而已。

【问题讨论】:

    标签: xml web-services http xsd


    【解决方案1】:

    我知道您说过您希望远离 SOAP 等特定技术,除非它们是有益的,但定义明确的技术的主要好处之一是以一致的方式解析消息的工具集。话虽如此,我认为 SOAP 不适合你。

    我的目标是RESTful architecture,因为消息只是普通的 XML,并且有用于以各种语言发出和使用 REST 样式消息的库。与使用 SOAP 等类似技术相比,使用 REST 通常可以更快地开始运行,但仍有一些范式需要学习。

    编辑:您可以使用 WADL 描述您的服务,它描述了 RESTful 架构并包含任何相关架构。然后,您可以使用WADL2Java 工具或其他 WADL 工具来生成端点存根。我认为这种方法在利用现有模式且不必更改客户端代码的同时接近您想要做的事情。 Here is a sample WADL file 和一些关于它的信息。

    【讨论】:

    • REST 的好处以及它实际上只是 XML 的事实是客户端可以非常简单。生成您喜欢的 XML 并对您的目标资源执行 HTTP POST。虽然 RESTful 服务通常在访问资源是第一要务时使用,但它们还有一个额外的好处是对客户端来说很简单。服务端可以根据您的喜好简单或复杂。 JAX-WS (jax-ws.dev.java.net) 支持 Java 服务器的 REST。 Spring Web Services (springsource.org/spring-ws) 支持 REST,Spring 框架的其他部分也是如此。
    • 抱歉,Spring Web 服务的链接已损坏。这是一个有效的方法:static.springsource.org/spring-ws/sites/1.5
    【解决方案2】:

    根据上面关于 WADL 的评论,您也可以尝试WSDL 2.0。虽然尚未被广泛采用,但 WSDL 2.0 确实包含对 REST 样式服务的良好支持。 Apache Axis2 支持 WSDL 2.0,我认为这包括在其 WSDL2Java 工具中的支持。

    【讨论】:

    • 在阅读此回复前几分钟,我刚刚阅读了一篇关于 WSDL 2.0 的文章。好时机! :) 我认为它可能适合。
    【解决方案3】:

    您能否以编程方式发布 XML 表单?

    C# Programmatic Form Post

    【讨论】:

    • 在那篇文章中我没有看到太多关于 XML 的提及。你能澄清一下吗?
    • 而不是"string postData = "item1=11111&item2=22222&Item3=33333";"你会做类似 "string postData = "xml=World";
    • @Robert Harvey:由于 XML 只是一个字符串,服务器需要做的就是接受一个字符串并(可能)返回一个字符串(例如 XML 响应)。不会因为聪明而赢得任何竞赛,但它可以工作并且与任何可以通过 HTTP 通信的东西(Java、C#、Delphi 等)兼容
    【解决方案4】:

    在我看来,您在这里想要两个相互矛盾的东西。任何提供工具的东西都是特定的技术。

    但是一种可能性是这样的:

    Apache CXF 有一个普通的 XML-over-http 绑定。

    但它不会以任何语言创建消费者。为此,除了 SOAP 或 REST,我真的无法提出任何建议。

    【讨论】:

    • 我想我可能正在寻找一种基于消息架构 (XSD) 生成消费服务的方法。我不想对正在发送的消息进行“SOAPify”。
    • 如果您已经拥有消息的模式,那么您已经完成了 SOAP 的 75%。您可以创建一个嵌入该模式的简单 WSDL,并使用 WSDL2Java 生成服务端点。困难的部分是编写 WSDL 脚手架,但甚至没有那么难(IMO)。
    • @Zach - 谢谢。我是否必须修改消息?在这种情况下,更改发件人以更改消息是最困难的部分。如果不是,那么它是怎样的 SOAP?有没有办法在不修改消息本身的情况下做我想做的事?
    • SOAP 所做的只是将您的 XML 包装成一个非常简单的信封。但是,如果您讨厌这样,请直接使用 JAXB,或 XMLBeans 或其他东西。
    • @Boden,我知道你现在在寻找什么。如果使用 SOAP,则必须修改客户端代码以将传出的 XML 有效负载包装在 SOAP 信封中。有关 WADL 的信息,请参阅我对上面答案的编辑,这是我认为您应该采取的路线。
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 2019-09-28
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多