当前位置: 首页 > 面试题库 >

将jaxws-maven-plugin与-clientjar选项一起使用

云胤
2023-03-14
问题内容

我正在使用jaxws-maven-plugin为Web服务使用者应用程序执行wsimport。我正在使用-clientjar2010年随JAX-WS 2.2.2
RI引入的wsimport上的选项。之所以这样做,是因为我想将WSDL捆绑在jar中。

我在制作pom时没有问题。对于插件配置,我可以执行以下操作:

<configuration>
    ...
    <args>
        <arg>-clientjar</arg>
        <arg>bundled-wsdl.jar</arg>
    </args>
</configuration>

当我执行构建时,我创建的jar称为myapp.jar,其中包含文件bundled-wsdl.jar。在bundled- wsdl.jar的META-
INF目录中,可以找到wsdl和xsd,就像我喜欢的一样。我对使用该-clientjar选项产生的Java代码也很满意。到目前为止,一切都很好。

但这东西应该放在myapp.jar的META-INF中,对吗?它位于bundled-wsdl.jarMETA-INF中的事实并没有太大帮助。

有趣的是,实际上我确实在myapp.jarMETA-
INF中获得了一个wsdl文件,这使得该应用程序实际上可以工作。我不知道怎么到达那里。此外,xsd文件不存在,仅在bundled- wsdl.jar的META-INF中。

基本问题是如何-clientjar在Maven项目中正确使用wsimport 选项?

Java 1.7.0_45。


问题答案:

-clientjar恕我直言,该选项的记录确实很少。我认为这是有效的:

使用该-clientjar <jarfile>选项时,发生了 件事:

  1. 您将<jarfile>-dwsimport工具的参数所指向的目录中生成一个。其中将包含WSDL和任何相关的XSD文件。这个小捆绑包根本不会用于任何东西。如果您想使用它,完全取决于您。但是在您看到下面的(2)之前。我不知道除了将其作为文档形式外,还可以将该jarfile用作什么。
  2. 您将获得WSDL的副本,该副本放入名为的文件中 META-INF/wsdl/<svcname>.wsdl。生成的类将在no-arg代理构造函数中使用此文件。因此,如果您使用该-clientjar 选项请求捆绑的WSDL文件,则实际上将使用此文件。
  3. 生成的代码将发生更改,从而wsdlLocation,如果您在类上使用默认的no-arg构造函数@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");


 类似资料:
  • 我正在使用maven-shade-plugin在构建的包阶段重新定位一些包。我还使用maven-bundle-plugin生成一个清单。问题是bundle插件在shade插件之前运行(在过程类阶段),并且在生成的清单的导出中没有包含任何我的shade包。 -- 根据要求,我的POM的阴影和捆绑部分: 从这里取的

  • 问题内容: 我正在尝试将checkstyles google_checks.xml与maven- checkstyle-plugin一起使用 。如果我将google_checks.xml与最新的checkstyle intelliJ插件一起使用,则一切正确,但是当我尝试通过maven-checkstyle插件对其进行配置时,出现此错误: 我的pom.xml看起来像这样: 你们对可能出什么问题有一些

  • 我有下一个代码: null null 如何注意到组件内部,我得到了一个道具。我的问题是下一个:为什么当我更改选项卡时,单击每个选项卡,我会在useEffect中获得正确的数据,但如果我在同一个选项卡上单击两次,我在console中没有获得值?即使我添加了依赖项,也会发生这种情况。如何在控制台中每次获得值,甚至在同一个选项卡上点击两次? 演示:https://codesandbox.io/s/bas

  • 问题内容: 我有一个Maven OSGi多模块项目。当OSGi从各个项目模块中选择模块jar时,该项目将运行良好。 (请参见下面的1.1.B) 。 但是,使用第二种方法,每当我尝试使用通过maven-assembly- plugin版本2.6 放置到中央文件夹 (D:/ parent / provider / target / modules)* 中的捆绑包时, (请参见下面的1.1.A)都 将返

  • 问题内容: 我以前曾使用该命令在Redis数据库中搜索与特定模式匹配的键。从Redis 2.8开始,该命令似乎比它更可取,因为它返回一个迭代器,而不是立即扫描整个键空间。 我正在使用Predis > = 0.8.5,它应该支持该命令的PHP迭代器。Predis没有很多文档,所以我想知道如何将以下命令转换为对应的命令: 我尝试了以下方法: 哪种方法有效-但不会返回本地PHP迭代器。使用Predis的

  • 我是Maven和Jenkins的新手,所以请耐心等待我... 我有一个Maven项目,当我从项目文件夹中运行mvn install时,它可以正确构建,但是当我尝试通过Jenkins构建时,根本无法解决任何依赖项。我是否在我的 Maven 或 Jenkins 设置中遗漏了某些内容/搞砸了某些内容? 项目POM和. m2/settings.xml如下... pom.xml .m2/设置.xml