pet*_*erh 3 java wsimport maven
我正在使用jaxws-maven-plugin为 Web 服务消费者应用程序执行 wsimport。我正在使用-clientjarwsimport 上的选项,该选项是 2010 年随 JAX-WS 2.2.2 RI 引入的。我这样做是因为我想将 WSDL 捆绑在 jar 中。
我在制作 pom 时没有任何问题。对于插件配置我做了类似的事情:
<configuration>
...
<args>
<arg>-clientjar</arg>
<arg>bundled-wsdl.jar</arg>
</args>
</configuration>
Run Code Online (Sandbox Code Playgroud)
当我执行构建时,我创建了 jar,让我们调用它myapp.jar,bundled-wsdl.jar其中包含文件。在bundled-wsdl.jar的 META-INF 目录中,我找到了 wsdl 和 xsd,就像我喜欢的那样。我对使用该选项生成的 java 代码也非常满意-clientjar。到目前为止,一切都很好。
不过这个东西应该在myapp.jar的 META-INF 里吧?事实上,它位于bundled-wsdl.jar的 META-INF 中,这对我没有多大帮助。
有趣的是,我实际上在myapp.jarMETA-INF 中获取了一个 wsdl 文件,这使得该应用程序能够实际工作。我不知道它是如何到达那里的。此外,xsd 文件不存在,仅在bundled-wsdl.jarMETA-INF 中。
基本问题是如何-clientjar在 Maven 项目中正确使用 wsimport 选项?
Java 1.7.0_45。
恕我直言,这个-clientjar选项的记录确实很少。我相信它是这样运作的:
-clientjar <jarfile>当使用该选项时,会发生三件事:
<jarfile>所指向的目录中生成一个生成的文件。其中将包含 WSDL 和任何相关的 XSD 文件。这个小包根本不会用于任何用途。如果您想使用它,这完全取决于您。但在您看到下面的 (2) 之前。除了作为文档形式之外,我不确定该 jarfile 有何用途。-dwsimportMETA-INF/wsdl/<svcname>.wsdl. 生成的类将在无参数代理构造函数中使用此文件。因此,如果您请求带有该选项的捆绑 WSDL 文件,这就是实际使用的内容-clientjar
。wsdlLocation,如果您在类上使用默认的无参数构造函数@WebServiceClient,则将是捆绑的 WSDL(来自 (2))的构造函数,而不是远程 WSDL。事实上,如果您-wsdllocation在命令行上与 一起使用-clientjar,那么您指定的任何内容都-wsdllocation将无效,因为-clientjar将优先。因此,我们必须关注 (2) 和 (3),因为这是唯一实际使用的……至少如果您按原样使用生成的代码的话。
有趣的是,(2) 的结果只是一个WSDL 文件。该文件可能嵌入了指向 XSD 文件的链接,但据我所知,永远不会遵循此类链接。原因是,当我们说 Web 服务使用者在运行时需要 WSDL 时,它实际上只需要 WSDL 本身,而不需要模式。该模式被“硬编码”到消费者中,并且无法在运行时更改它。因此没有理由在运行时读取模式信息。(这是我的理解)
关于 (2) 中包含的 WSDL 需要注意的第二件事:它实际上只是原始 WSDL 的副本,因此它可能没有您想要的端点。事实上大多数情况下不会。这意味着在这种情况下您需要自己设置端点:
// Use no-arg constructor. Means it uses the WSDL bundled into the
// META-INF/wsdl directory rather than trying to retrieve WSDL over the
// network.
service = new HelloSvc_Service();
hello = service.getHelloSvcPort();
// Since we're using a bundled WSDL the web service URL cannot
// be derived from that (it would be wrong!). So we have to set
// it explicitly.
((BindingProvider) hello).getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://myhellowebservice-address");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5184 次 |
| 最近记录: |