gpt4 book ai didi

java - java中wsdl文件位置路径设置

转载 作者:行者123 更新时间:2023-12-01 11:11:48 28 4
gpt4 key购买 nike

我正在使用 wsdl 文件生成客户端,并且在本地服务器上运行良好,因为生成的文件具有类似“C:\path\to\wsdl\Air.wsdl”的路径

我正在尝试将上面的所有路径替换为在实时服务器上工作的路径,我发现了一些提示,但我不太确定如何实现它(我是网络服务的新手)。

下面是我的文件当前的样子

@WebServiceClient(name = "AirService", 
wsdlLocation = "file:/C:/Eclipse WorkSpace/TravelPortCXF/WebContent/wsdl/air_v33_0/Air.wsdl",
targetNamespace = "http://www.travelport.com/service/air_v33_0")
static {
URL url = null;
try {
url = new URL("file:/C:/Eclipse WorkSpace/TravelPortCXF/WebContent/wsdl/air_v33_0/Air.wsdl");
} catch (MalformedURLException e) {
java.util.logging.Logger.getLogger(AirService.class.getName())
.log(java.util.logging.Level.INFO,
"Can not initialize the default wsdl from {0}", "file:/C:/Eclipse WorkSpace/TravelPortCXF/WebContent/wsdl/air_v33_0/Air.wsdl");
}
WSDL_LOCATION = url;
}

这似乎应该改变(我不确定,在谷歌搜索上找到它)

@WebServiceClient(name = "AirService", 
wsdlLocation = "classpath:wsdl/air_v33_0/Air.wsdl",
targetNamespace = "http://www.travelport.com/service/air_v33_0")

static {
URL url = AirService.class.getClassLoader().getResource("wsdl/air_v33_0/Air.wsdl");
if (url == null) {
java.util.logging.Logger.getLogger(AirService.class.getName())
.log(java.util.logging.Level.INFO,
"Can not initialize the default wsdl from {0}", "classpath:wsdl/air_v33_0/Air.wsdl");
}
WSDL_LOCATION = url;
}

但我实际上不明白该方法是如何工作的。有人可以让我了解如何更改路径以及将 wsdl 文件放置在项目中的位置,以便它在实时服务器和两个代码之间的差异。

另外,我不想每次创建构建时都生成,我想生成文件(已经生成的文件),将 wsdl 放置在项目文件夹中可以访问的位置,然后进行更改Java 文件中的路径(通过一次替换所有路径),如上面的代码所示。

最佳答案

给您一些介绍:

Wsdl 文件包含可在服务器上调用的 webmethods 描述(一般为方法名称、其输入参数及其类型和该方法的结果类型)。因此,wsdl 文件就像客户端和服务器之间的契约(Contract) - 客户端知道要在服务器上调用哪些方法、需要使用方法名称发送哪些参数以及可以期望什么类型的结果。

您可以从服务器下载并存储 wsdl 文件,然后使用它来生成特殊的客户端类(称为 stub )。该类具有与 wsdl 文件中描述的 Web 服务方法相对应的 java 方法 1 到 1。这些类的源代码是由特殊工具(wsimport)自动生成的,该工具读取wsdl文件的内容并生成相应的方法。从您作为客户端开发人员的角度来看,这非常简单 - 您只需要以某种方式创建此类的实例(为其提供服务器上 wsdl 文件的 url)并像调用任何其他 Java 类方法一样调用它的方法。 (此方法生成的实现代码负责输入的序列化和向服务器发送 Web 服务请求,然后将响应反序列化返回给您,因此您将获得正常的 Java 对象作为调用结果)。

也许你现在会问,为什么在调用 webservice 方法之前需要将 url 设置为服务器的 wsdl 文件。答案是,客户端代码在调用 Web 服务之前会自动从服务器下载 wsdl,并检查它是否在此期间没有更改(如果是,则不会调用 Web 服务并抛出错误)。有时会发生服务器开发人员发生变化的情况,例如Webservice 方法的参数,并且您作为客户端开发人员仍然拥有旧版本的 wsdl,因此该技术的验证方面可以为您节省大量时间。

现在是真实的例子:看JAX-WS deployment best practice: WSDL location and client generation问题是查看客户端代码如何使用 HelloWorldPOCImpl stub 类调用 Web 服务方法 (hello)。

对于服务器端实现,您只需要两个注释@Webservice和@WebMethod,请参阅第3.1章示例:https://metro.java.net/getting-started/building-a-simple-metro-application.html对于服务器,您不需要手动创建 wsdl 文件,服务器会根据您的代码和提到的注释自动生成 wsdl 文件。

关于java - java中wsdl文件位置路径设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32265464/

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