首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JAX/泽西绕过JAX开销?

通过JAX/泽西绕过JAX开销?
EN

Stack Overflow用户
提问于 2015-04-28 19:01:33
回答 1查看 1.3K关注 0票数 0

我唯一集成或使用过的web服务是RESTful。我现在正试图与第三方SOAP服务集成,并且对看似复杂的SOAP看起来是多么令人敬畏。

对于REST,我使用一个名为泽西岛的JAX客户端,它使点击RESTful端点成为一件小菜一碟。例如,如果一个服务正在http://api.example.com/fizz上公开一个http://api.example.com/fizz端点(例如,用于向上Fizz对象),那么在泽西岛,我可能会创建一个类似于此的服务客户机(伪代码):

代码语言:javascript
复制
// Groovy pseudo-code
class Fizz {
    int type
    boolean derps
    String uid
}

class FizzClient {
    WebResource webResource = initAt("https://api.example.com")

    upsertFizz(Fizz fizz) {
        webResource.path("fizz").post(fizz)
    }
}

但乍一看,基于Java的SOAP客户端似乎要复杂得多。如果我正确理解了设置,一般过程如下:

  1. 从服务提供者获取名为WSDL的XML文档;这似乎是对所有可用端点的语言不可知的描述。
  2. 在实际生成Java源代码的wsimport上运行名为WSDL的JDK工具,它实现JAX-WS APIs并实际表示我的SOAP客户端。
  3. 将生成的源文件导入我的项目并使用它们

首先,如果我说的这个过程是不正确的,请从纠正我开始!假设我或多或少是对的,我不明白的是:如果这一切都是HTTP会话,为什么这是必要的?为什么我不能实现与泽西的基于SOAP的对话,并绕过所有这些源生成的样板?

例如,假设存在相同的端点,但受SOAP控制:

代码语言:javascript
复制
class FizzClient {
    WebResource webResource = initAt("https://api.example.com")
    FizzSerializer serializer // I take Fizz instances and turn them into XML
    FizzDeserializer deserializer // I take XML and turn them into Fizz instances

    upsertFizz(Fizz fizz) {
        String xmlFizz = serializer.serialize(fizz)
        webResource.path("fizz").post(xmlFizz)
    }
}

如果我正确理解SOAP,这只是一种利用HTTP谓词和请求/响应实体来发送特定于应用程序的消息的一种方式;这是一种HTTP“会话”。那么,为什么我不能将像泽西这样的REST框架劫持为HTTP消息,并在这样做的时候,绕过这种SOAP开销?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-28 19:32:46

这将吸引基于意见的答案,但首先,你应该明白

  • 贾克斯贾克斯年轻得多(贾克斯有一个2006年最后草案,JAX在2008-9上出现).
  • RESTful webservices标准,就许多目的而言,都是不确定的--许多企业更喜欢以WSDL的形式使用合同的舒适性。
  • 更别提JAX-WS,与WS-我提供了许多其他标准,规范安全,消息可靠性和其他企业-好(在通用的"WS-*“旗帜下)的企业关心。有许多库试图在贾克斯平台上实现这种一致性,但就目前而言,贾克斯/WS-I是行业标准。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29927739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档