gpt4 book ai didi

java - 如何包含打包的 WSDL 以与使用 wsimport 生成的 Java 类一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:04 26 4
gpt4 key购买 nike

我来自 C#,所以我意识到我不能指望 Java 中有很多(出色的)可用性特性和功能,但我最近有点被投入到这个 Java 项目中,我根本无法弄清楚这一点。在 C#/.NET 中制作 Web 服务代理类和生成的数据契约是小菜一碟,但出于某种原因,Web 服务的 Java 实现对我来说似乎并不合适。

这是交易...

我使用 wsimport 从 .wsdl 文件创建生成的 .java 文件。例如……

"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin ".\wsdl\MyWSDL.wsdl"

我注意到这个硬编码(输入那个短语几乎让我刚刚呕吐)“wsdlLocation”作为 wsdl 的当前位置(“C:\Users\ME\etc\wsdl\MyWSDL.wsdl”)。所以我把它拿出来:

"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin -wsdllocation "NULL" ".\wsdl\MyWSDL.wsdl"

现在,当我实例化生成的服务时...

MyService xyz = new MyService();

我得到一个错误。类似于“找不到文件 C:\blahblah\Temp\NULL”的内容。好的...回到绘图板。在稍微调查了一下之后,我在 Stack Overflow 上找到了一篇帖子,其中谈到使用“classpath:META-INF/WSDL.wsdl”作为 wsdl 位置。

"%JAVA_HOME%\bin\wsimport" ... -wsdllocation "classpath:WSDLs/MyWSDL.wsdl" ".\wsdl\MyWSDL.wsdl"
copy ".\wsdl\*" .\bin\WSDLs
cd bin
"%JAVA_HOME%\bin\jar" cf WebServiceProxies.jar *

错误!

"Unknown protocol: classpath" 

奇怪的是,Stack Overflow 上的帖子被标记为答案。我想在过去的两年里,有可能有相当一部分已经改变到不再支持“类路径:”的地步,或者有另一种方法可以做到这一点,但我一直无法弄清楚/找到答案.

好的,所以我有几个问题之一需要回答(提前致谢!!!!我要疯了!)。

  1. 有没有办法让它在运行时不需要 WSDL?对于它的值(value),我认为它是 B.S.当我实例化对象时它需要这个。有什么办法可以抑制这个要求吗?也许如果我使用不同的工具......?

  2. 如果此代码无法在运行时不需要 WSDL,我如何让它从包中获取此 WSDL?我应该在 wsdllocation 参数中输入什么才能使其从 JAR 文件中加载 WSDL?

最佳答案

因为 need-for-wsdl-at-runtime-tradedy 从来没有困扰过我,所以我对 #1 没有答案。也就是说,无论如何,打包 wsdl 的使用应该是最后的手段。我更喜欢使用已发布的 wsdl 端点。因此,对于大多数托管框架,实际的 wsdl 位置将是 http(s)://host/name_of_service?wsdlhttp(s)://host/name_of_service.wsdl对于 spring-ws。

至于基于 java 的 web 服务客户端编程的复杂性,让我向您展示我的一个基于 maven 的项目的一小段摘录:

<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.6.1</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>https://XXXXXXXX/ws/loadsave?wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>

也许我不太以 IDE 为中心,但对我来说它似乎很简单。Apache CXF 是目前最好的网络服务堆栈之一。 (尽管对于文档,我使用 Fuse http://fusesource.com/docs/esb/3.5/fsf_se/JAXWSWSDLFirst.html 。它基本上是 CXF 更名,具有更好的文档。)

希望这能回答您的问题(至少部分回答)。

关于 java 咆哮:除非必须,否则我不使用 MS 工具,但不是因为我讨厌它们。我的工作以某种方式将我推向了更大的项目,并且很少看到在高端(甚至中端)服务器上支持 .net。这只是一个事实,不会使 java 比 .net 更好。但我很确定如果我必须从事 MS 方面的工作,我会很快适应它。所以我的建议是:为你的工作给了你学习新事物的机会并珍惜它而高兴。我猜我们最终从事这项业务是因为我们喜欢学习新事物。

关于java - 如何包含打包的 WSDL 以与使用 wsimport 生成的 Java 类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10987424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com