我唯一集成或使用过的web服务是RESTful。我现在正试图与第三方SOAP服务集成,并且对看似复杂的SOAP看起来是多么令人敬畏。
对于REST,我使用一个名为泽西岛的JAX客户端,它使点击RESTful端点成为一件小菜一碟。例如,如果一个服务正在http://api.example.com/fizz上公开一个http://api.example.com/fizz端点(例如,用于向上Fizz对象),那么在泽西岛,我可能会创建一个类似于此的服务客户机(伪代码):
// 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客户端似乎要复杂得多。如果我正确理解了设置,一般过程如下:
WSDL的XML文档;这似乎是对所有可用端点的语言不可知的描述。wsimport上运行名为WSDL的JDK工具,它实现JAX-WS APIs并实际表示我的SOAP客户端。首先,如果我说的这个过程是不正确的,请从纠正我开始!假设我或多或少是对的,我不明白的是:如果这一切都是HTTP会话,为什么这是必要的?为什么我不能实现与泽西的基于SOAP的对话,并绕过所有这些源生成的样板?
例如,假设存在相同的端点,但受SOAP控制:
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开销?
https://stackoverflow.com/questions/29927739
复制相似问题