我使用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文件中的路径(通过一次替换所有路径),如上面的代码所示。
答案 0 :(得分:1)
您的介绍点很少:
Wsdl文件包含可在服务器上调用的webmethods描述(通常是方法名称,它们的输入参数及其类型和此方法的结果类型)。因此,wsdl文件就像客户端和服务器之间的契约 - 客户端知道在服务器上调用哪些方法,需要使用方法名称发送什么参数,以及它可以期望的结果类型。
您可以从服务器下载并存储wsdl文件,然后将其用于生成特殊客户端类(称为存根)。此类具有与wsdl文件中描述的Web服务方法相对应的java方法1到1。这些类的源代码由特殊工具(wsimport)自动生成,该工具读取wsdl文件的内容并生成相应的方法。从您作为客户端开发人员的角度来看,它非常简单 - 您只需要以某种方式创建此类的实例(在服务器上为其提供wldl文件的url)并调用它的方法就像调用任何其他Java一样类方法。 (此方法的生成实现代码关注输入的序列化和向服务器发送webservice请求,然后将响应反序列化回来,因此您将获得正常的Java对象作为调用的结果)。
也许你现在问,为什么你需要在调用webservice方法之前将url设置为服务器的wsdl文件。答案是,在调用您的Web服务之前,客户端代码会自动从服务器下载wsdl并检查它是否同时没有更改(如果是,则不会调用webservice并抛出错误)。有时会发生服务器开发者改变,例如webservice方法的参数和您作为客户端开发人员仍然有旧版本的wsdl,因此该技术的验证方面可以为您节省大量时间。
现在真实的例子: 查看JAX-WS deployment best practice: WSDL location and client generation问题,了解客户端代码如何使用HelloWorldPOCImpl存根类调用webservice方法(hello)。
对于服务器端实现,您只需要两个注释@Webservice和@WebMethod,请查看第3.1章以查看示例:https://metro.java.net/getting-started/building-a-simple-metro-application.html 对于服务器,您不需要手动创建wsdl文件,服务器会自动生成wsdl文件 - 基于您的代码和提及的注释。