2016-05-23 43 views
0

使用SOAP,与REST一样,我是否可以安全地假设客户端调用Web服务的所有内容都将一些XML发布到端点URL?如果是这种情况,那么是否需要使用像Axis这样的工具或wsimport从WSDL生成客户端存根类?对于SOAP,我们是否需要从WSDL生成客户端存根?

跳过这一步并且只是自己构建原始XML并执行整个SOAP信封的HTTP Post是否有任何问题?

这是我想要在groovy中做的事情。

def myXml = "<soapenv:Envelope>" + 
      " <soapenv:Body>" + 
      " <myservice:invoke>" + 
      "  <username xsi:type=\"xsd:string\">$username</username>" + 
      "  <apiKey xsi:type=\"xsd:string\">$apiKey</apiKey>" + 
      " </myservice:invoke>" + 
      " </soapenv:Body></soapenv:Envelope>" 

HttpMethod method = new PostMethod('https://myservice.javaguy.com/Service.asmx') 

method.setRequestEntity(new StringRequestEntity(myXml)) 
method.setRequestHeader('Content-type','text/xml') 
def responseCode = httpClient.executeMethod(method) 
+1

是的,可以使用手动方法,但由于冗长和容易出错,不推荐使用。 – ACV

回答

2

声明“SOAP,作为REST”没有任何意义。 REST是一种建筑风格。 SOAP是一种不符合REST标准的Web服务协议。 SOAP服务可以通过HTTP调用。

如果在HTTP上使用SOAP,那么您可以通过将SOAP消息发布到正确的资源来调用SOAP。在下面链接的SOAP维基百科页面上有一个合理的例子。 https://en.wikipedia.org/wiki/SOAP#Example_message

回避WSDL客户端生成器并构建自己的SOAP客户端没有任何问题。发电机只是为了让你更容易做到这一点。生成的客户端将负责管理HTTP客户端,反序列化/序列化逻辑,SOAP异常处理和翻译。如果你决定不使用它们,那么你将不得不自己写这个逻辑。

相关问题