如何在Clojure/Java中使用SOAP?

如何在Clojure/Java中使用SOAP?,java,soap,clojure,wsdl,Java,Soap,Clojure,Wsdl,我需要使用WSDL文件连接到SOAP。我在网上找到了一些解决办法。例如: 我可以使用“wsimport-keep-dsrc path fo.wsdl”从wsdl生成Java类。但这也带来了一些问题 1) 当我使用wsimport-keep-dsrc local file.wsdlwsimport将生成具有该文件完整路径的Java类。这意味着它将只在我的计算机中工作,而不会在其他计算机中工作,因为路径不同。除非我删除这个文件。我可以将wsimport与http://一起使用,但有人告诉我最好将ws

我需要使用WSDL文件连接到SOAP。我在网上找到了一些解决办法。例如:

我可以使用“wsimport-keep-dsrc path fo.wsdl”从wsdl生成Java类。但这也带来了一些问题

1) 当我使用
wsimport-keep-dsrc local file.wsdl
wsimport将生成具有该文件完整路径的Java类。这意味着它将只在我的计算机中工作,而不会在其他计算机中工作,因为路径不同。除非我删除这个文件。我可以将wsimport与http://一起使用,但有人告诉我最好将wsdl文件保留为本地文件。也许我不得不在http://上使用它,这是一个糟糕的建议

2) 我希望使用相同的代码连接到同一系统的不同实例。所以每次我都需要使用不同的URL进行WSDL连接,但URL在任何地方都被编码到Java文件中

所以我需要的是:

SOAP(WSDL)连接灵活,可将不同URL连接到WSDL文件,以便与同一系统的其他实例进行通信。


如何在Clojure/Java中做到这一点?

这不是一个web搜索和一些建议可以帮助您达到目的的领域。在导师的帮助下进行自我教育绝对是有帮助的。我知道这对那些不需要经常这样做的人来说是个坏消息。像Eclipse这样的IDE,像CXF或Axis2这样的框架都会大有帮助。免费下载的soapUI是必不可少的

请将此视为资源的开始:


在您准备好做出决定之前,请坚持:wsdl优先开发和文档文字样式。

这不是一个web搜索和一些建议可以帮助您达到目的的领域。在导师的帮助下进行自我教育绝对是有帮助的。我知道这对那些不需要经常这样做的人来说是个坏消息。像Eclipse这样的IDE,像CXF或Axis2这样的框架都会大有帮助。免费下载的soapUI是必不可少的

请将此视为资源的开始:


直到您准备好让您的决定坚持:wsdl优先开发和文档文字样式。

毕竟,我决定使用wsimport

(import java.net.URL)
(import javax.xml.namespace.QName)
(import com.example.schema.Auth)
(import javax.xml.ws.Service) 
(import com.example.schema.AtomApiService)
(import com.example.schema.AtomApiServicePortType)

(let [url (URL. "https://www.foo.com")
      qname (QName. "http://schema.example.com", "AtomApiService")
      auth (doto (new Auth) (.setLogin "login") (.setPassword "password"))
      service (Service/create url qname)
      port (-> service (.getPort AtomApiServicePortType))
      orders (-> port (.getOrdersSpecified auth "0" 0 3 0 "2016-03-24 12:00:00"))]
  orders)
为什么?

我发现ApacheCXF和其他解决方案都很旧,使用起来不太好。即使安装ApacheCXF也不是那么容易。就像2000年的解决方案一样。只是不想使用这样的解决方案。这是我的主观意见!如果您觉得使用ApacheCXF很舒服,那么您可能应该使用它

什么愚弄了我? wsimport在FooPortType中生成许多行,如下所示:

@WebMethod(operationName = "GetOrdersStatuses", action = "https://www.foo.com/atom_api/call/atom_api&method=GetOrdersStatuses")
@WebResult(name = "GetOrdersStatusesReturn", partName = "GetOrdersStatusesReturn")
public String getOrdersStatuses(
    @WebParam(name = "authenticate", partName = "authenticate")
    Auth authenticate);
所以我期望SOAP调用会使用这个url,但不是!如果我像我在本文开头写的那样创建连接,那么这几行中的URL将被忽略。我想也可以正常忽略,但我没有100%测试它。但这句话愚弄了我


也许有人可以解释为什么这行代码都是硬编码的url。

毕竟我决定使用wsimport

(import java.net.URL)
(import javax.xml.namespace.QName)
(import com.example.schema.Auth)
(import javax.xml.ws.Service) 
(import com.example.schema.AtomApiService)
(import com.example.schema.AtomApiServicePortType)

(let [url (URL. "https://www.foo.com")
      qname (QName. "http://schema.example.com", "AtomApiService")
      auth (doto (new Auth) (.setLogin "login") (.setPassword "password"))
      service (Service/create url qname)
      port (-> service (.getPort AtomApiServicePortType))
      orders (-> port (.getOrdersSpecified auth "0" 0 3 0 "2016-03-24 12:00:00"))]
  orders)
为什么?

我发现ApacheCXF和其他解决方案都很旧,使用起来不太好。即使安装ApacheCXF也不是那么容易。就像2000年的解决方案一样。只是不想使用这样的解决方案。这是我的主观意见!如果您觉得使用ApacheCXF很舒服,那么您可能应该使用它

什么愚弄了我? wsimport在FooPortType中生成许多行,如下所示:

@WebMethod(operationName = "GetOrdersStatuses", action = "https://www.foo.com/atom_api/call/atom_api&method=GetOrdersStatuses")
@WebResult(name = "GetOrdersStatusesReturn", partName = "GetOrdersStatusesReturn")
public String getOrdersStatuses(
    @WebParam(name = "authenticate", partName = "authenticate")
    Auth authenticate);
所以我期望SOAP调用会使用这个url,但不是!如果我像我在本文开头写的那样创建连接,那么这几行中的URL将被忽略。我想也可以正常忽略,但我没有100%测试它。但这句话愚弄了我


也许有人可以解释为什么这些行有硬编码的url。

将Clojure从等式中排除,以便进行更高效的搜索。我敢肯定,关于如何在Java中实现这一点,有大量的资源。一旦你管理好了,在你的Clojure项目中包含适当的类/资源应该是轻而易举的事。关于如何在Java中实现这一点,我有大量的资源,但我没有找到合适的资源。就像我在第1点中的例子)。这是一个解决方案。它可以工作,但我不能将它与生成它的其他URL(系统的其他实例)一起使用。我敢肯定,关于如何在Java中实现这一点,有大量的资源。一旦你管理好了,在你的Clojure项目中包含适当的类/资源应该是轻而易举的事。关于如何在Java中实现这一点,我有大量的资源,但我没有找到合适的资源。就像我在第1点中的例子)。这是一个解决方案。它可以工作,但我不能将它与其他URL(系统的其他实例)一起使用,然后它就被生成了。我发现了很多关于wsimport和使用它的东西。为端口中的每个url绑定其他url。。。。我觉得这不是正确的方法。看起来很乱。这看起来像是一个解决方案,如果我不需要的话,我不想使用它。。。你能确认我的结论是好的,我应该放弃wsimport的解决方案吗?很大程度上取决于:你可以自由选择你选择的工具和框架吗?您是打算从事web服务开发一段时间,还是这是一项一次性的工作?我需要一个解决方案,使我能够与system X集成。我希望通过多个实例(一个用于客户端)与该系统集成。我希望使用与服务相同的代码与system X进行通信。因此,我希望创建service X API,并在不更改代码的情况下使用它,为不同的客户端与该系统集成。PS我可以选择我想要的,但更喜欢具有尽可能少依赖性的简单解决方案。您需要一个好的ide来帮助管理项目文件并提供调试支持。您将受益于框架,因此您不必自己做所有事情。用于特别测试的SoapUI。如果你像你所说的那样为很多用户做这件事,你需要像这样强大的工具和开发设置。我发现了很多关于wsimport和使用它的东西。为端口中的每个url绑定其他url。。。。我觉得这不是正确的方法。