我对QName背后的概念感到非常困惑。
举个例子(我从http://www.mkyong.com/获取了这些例子):
ServerInfoService sis = new ServerInfoService();
ServerInfo si = sis.getServerInfoPort();
System.out.println(si.getServerName());
使用QName:
URL url = new URL("http://localhost:8888/ws/image?wsdl");
QName qname = new QName("http://ws.mkyong.com/", "ImageServerImplService");
Service service = Service.create(url, qname);
ImageServer imageServer = service.getPort(ImageServer.class);
现在我的问题是:
1)是否有任何概念我们必须根据这些概念来决定我们可以编写哪种类型的客户
2)使用QName的目的或附加好处是什么,因为我在这里看到的是,与简单客户端相比,它增加了复杂性。
答案 0 :(得分:2)
以下是我所知道的: -
这取决于您希望如何使用您的客户端来调用Web服务。 第一种方法
ServerInfoService sis = new ServerInfoService();
ServerInfo si = sis.getServerInfoPort();
是简单的代理生成方法;在哪里使用像wsimport这样的工具来生成SEI(服务端点接口)/ web服务接口的代理/存根,并像调用任何其他java方法一样调用它上面的方法。主要用于客户端,您只需要在Web服务上调用方法,而无需详细了解。
QName
或更确切地说Service
方法可以更好地控制客户端和Web服务的通信方式。 JAXWS 2.0引入了称为Provider
接口的东西,它是SEI的替代品,它基本上允许客户端在XML消息级别进行通信,并向客户端提供Web服务的动态表示/视图。更多here。 Service
API的主要用途主要是创建Dispatch
个实例,这些实例基本上允许客户端使用JAXB消息作为XML有效负载调度到特定端口(使用QName api限定的方法)。
Service
api的其他用法允许客户端异步调用Web服务上的方法;提供对处理者的访问;使用Service
和QName
方法帮助您进一步了解并与我所说的内容相关的一个很好的例子就是这里的链接: - Dispatching Web Service Calls。
据说,要了解和理解还有很多内容;但希望这能给你一个开始。