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

wsimport生成的客户端如何工作?

索锐藻
2023-03-14
问题内容

首先,我希望您知道我已经可以连接到Web服务服务器。我问这个问题是因为我想对wsimport生成的客户端如何工作有更深入的了解。根据我的研究,wsimport使用JAXWS。请注意,我对JAXWS不了解。

我使用wsimport生成了客户端。我使用的WSDL来自Axis2 Web服务,并由Axis2自动生成。下面的类是wsimport的结果:

com.datamodel.xsd

  • DataBeanRequest.java
  • DataBeanResponse.java
  • ObjectFactory.java
  • package-info.java

com.service

  • MyWebService.java
  • MyWebServicePortType.java
  • MyMethod.java
  • MyMethodResponse.java
  • ObjectFactory.java
  • package-info.java

通过上面的类,我可以确定其中com.datamodel.xsd包含Web服务服务器使用的bean(ObjectFactory和除外package- info)。同时,MyMethodMyMethodResponse也是用于设置Web服务方法/操作的请求和响应参数的bean。

以下是我的问题:(如果您不了解我的某些问题的答案,则不必真正回答所有问题。:)并且,请随时分享您认为对我有用的任何信息。)

我对吗

  • 我对上述假设是否正确?
  • 其他类的功能是什么?
  • 我检查了MyWebService一下,其中包含一个注释,该注释引用了我用来生成客户机的WSDL的绝对位置。wsdllocation在客户端中指定的意义何在?客户如何使用该信息?
  • 我注意到,在生成的任何类中均未声明Web服务的实际URL。客户端如何知道需要连接到哪里?
  • 是否对WSDL文件进行了注释,以便客户端在连接时可以读取WSDL文件上的URL?如果是这样,那么是否意味着在必须建立新连接时始终读取WSDL文件?
  • 由于需要我编译应用程序并将其安装在其他服务器上,因此该命令将无效。 我可以将其设置为相对路径而不是绝对路径吗?怎么样?(答案:是,可以将其设置为相对路径。该 wsimport命令具有可以指定 wsdllocation的值的属性 wsdllocation。)
  • 如果我需要连接到HTTPS,该怎么办。如何设置服务器证书?
  • 使用wsimport生成客户端和使用Axis2或Apache CXF生成客户端时,有什么区别。

问题答案:

在回答问题之前,需要进行一些澄清:JAX-
WS是用于在Java中实现Web服务的规范。它描述了如何将WSDL工件映射到Java类以及如何使用注释应用此映射。您可以在此处下载规范。wsimport工具是该规范的参考实现的一部分,而参考实现是Java类库的一部分。有几种替代实现,例如Axis2,CXF或Metro,它们通过支持其他标准(例如WS-
ReliableMessaging或WS-Security)来增强基本的JAX-WS支持。

现在对您的问题:

我对上述假设是否正确?

是的,你是。

其他类的功能是什么?

package- info存在映射在Web服务用于在您的实现类所在的包中的XML命名空间。命名空间通常看起来与Java包名称不同(通常是URL),这使得必须进行映射。

ObjectFactory允许您创建任何由服务发送和接收的消息。如果您想在存根类前面插入代码,提供修改后的消息或类似内容,则需要此代码。

我看不到您的类的内容,但是如果我理解正确的话,那MyWebServicePortType是一个类似于portTypeWSDL中的接口。也就是说,它将WSDL中的操作及其签名映射到Java方法。如果要提供服务(您不希望提供该服务,您正在询问客户端),则需要实现此接口。在实现客户端时,您只需使用它。

最后,该类MyWebService包含要调用Web服务所需的客户端存根。

我检查了MyWebService,它包含一个注释,该注释引用了我用来生成客户端的WSDL的绝对位置。在客户端中指定wsdllocation有什么意义?客户如何使用该信息?

您生成的接口包含该portType服务的签名,但没有说明您如何与该服务对话。这是WSDL中绑定的一部分。最基本的设置是使用基于HTTP的SOAP的消息的文档/文字样式。其他配置(例如,基于JMS的SOAP)也是可能的,并且您的客户端需要知道要使用哪种协议。因此,它需要绑定WSDL。另外,如您稍后所述,Java文件中没有端点地址。该地址也从WSDL中读取。

我注意到,在生成的任何类中均未声明Web服务的实际URL。客户端如何知道需要连接到哪里?

它读取address距离portserviceWSDL中。它位于WSDL的末尾。

是否对WSDL文件进行了注释,以便客户端在连接时可以读取WSDL文件上的URL?

不,这port是具体Web服务端点的典型元素。这里没有什么特别的需要。

如果是这样,那么是否意味着在必须建立新连接时始终读取WSDL文件?

好吧,客户端可能有缓存(我不知道此参考实现的详细信息)。从概念上来看:是的。

如果我需要连接到HTTPS,该怎么办。如何设置服务器证书

这可能很棘手,我无法给您开箱即用的答案。我建议通读有关该主题的问题本主题。

使用wsimport生成客户端和使用Axis2或Apache CXF生成客户端时,有什么区别?

就在这里。wsimport更好,请不要使用wsdl2java。这是一个说明,为什么。



 类似资料:
  • 在做其他事情之前,我想让你知道我已经可以连接到web服务服务器了。我问这个问题是因为我想更深入地了解wsimport生成的客户端是如何工作的。根据我的研究,wsimport使用JAXWS。请注意,我不了解JAXWS。 我使用wsimport生成了我的客户机。我使用的WSDL来自Axis2 web服务,由Axis2自动生成。下面的类是wsimport的结果: 在下 在下 通过上面的类,我可以看出包含

  • 问题内容: 我正在尝试为访问WSDL描述的Web服务的Java应用程序编写模块。WSDL源代码直接从我认为是ASP.NET Web服务的地方下载;服务URL以.asmx扩展名结尾,在浏览器中查看服务URL会显示一个链接,该链接可用于下载WSDL。 对我来说,一个关键要求是能够切换服务URL而无需重新编译。给我的URL显然是一个测试服务器,而且我知道在生产环境中,我将获得要使用的生产URL。我还希望

  • 我尝试通过wsimport命令生成此命令。下面是我使用的命令。 wsimport-keep-b bindings.xml-p com.aasc.carrier.shipexec.proxy-implserviceName wcfSoxContract-importname wcfShip http://shipexec.com/demo/wcf/soap?wsdl-b-xautonameresol

  • 我可能在尝试做一些奇怪的事情,因为这似乎不是一个常见的问题(或者可能我问错了)。我原以为这会很简单。 基本上,我正在寻找的是一种方法,除了通过使用gradle openapi生成器插件: 我所尝试的是以下(以及相关的错误): 输入pec.set(www.example.com/openapi-doc) 实际代码如下所示:

  • 我是stackoverflow的新手,因此这是我的第一篇文章。请原谅我英语不好。。。我花了几个小时在相关的话题上,但没有一个能满足我的需要。我正在编写一个通讯簿,我希望我的用户能够随时下载pdf联系人列表。一切似乎都很顺利,但实际上客户端从未下载pdf文件,尽管我可以在使用chrome开发者工具的请求中看到它。这是我的密码: 当检查响应时,我得到如下结果: 有没有人好心告诉我出了什么事?

  • 问题内容: 我正在尝试使用JDK 6工具为某些SOAP Web服务生成客户端。WSDL由.NET 2.0应用程序生成。对于.NET 3.X应用程序,它可以正常工作。 当我跑步 它显示了一些错误消息,如下所示: [错误]具有相同名称“ mypackage.SomeClass”的类/接口已在使用中。使用类自定义解决此冲突。行?? 的HTTP://为MyService WSDL 当我使用Axis 1.4