我正在尝试Apache最简单的“Hello World”webservice(http://cxf.apache.org/docs/a-simple-jax-ws-service.html);我有意改变它一点,以了解更多关于如何做事情而不是仅仅复制他们所有的代码。简单的网络服务:把endpointname,servicename等放在一起
我的服务实现指定它实现了在包界面中的“硬件”:
@WebService(endpointInterface = "hw.HelloWorld", serviceName = "HelloWorld")
说,“发布” Web服务(这是我收集手段作为服务器为它工作),该程序具有执行在自己的(完全正确)包装:
HelloWorldImpl implementor = new hwimpl.HelloworldImpl();
Endpoint.publish("http://localhost:9000/helloworld", implementor);
,然后睡5分钟,在此期间,指示说,摆在浏览器的URL显示WSDL。这很有效。
http://localhost:9000/helloWorld?wsdl
我的客户有:
private static final QName SERVICE_NAME
= new QName("http://server.hw.demo/", "HelloWorld");
private static final QName PORT_NAME
= new QName("http://server.hw.demo/", "HelloWorldPort");
// the following in a method, of course
String endpointAddress = "http://localhost:9000/helloWorld";
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloWorld hw = service.getPort(HelloWorld.class);
System.out.println(hw.sayHi("Albert"));
我不知道SERVICE_NAME和port_name中指如何与我的服务。 “server.hw.demo”字符串来自示例,并且不对应于我的代码中的包,或者“反转”的包似乎用于名称空间;他们应该吗?他们对应什么?我的代码中没有任何东西,除了这里,使用“server.hw.demo”;那个字符串应该是什么?
难道我的实现和我的接口是在不同的类吗?
我的客户不工作,我发布这个问题,但它很长,没有人回应。我在刺探理解这一部分;在我看来,这是最可能的罪魁祸首。如果我知道如何,我会删除其他问题。
好吧,我得到了客户通过改变工作“ server.hw.demo“改为”hw“,这是我的界面的完整软件包名称。我仍然想知道什么是关系 - 示例代码需要一个包a.b.c,在“QName”中指定c.b.a - 我知道这是一个“约定”,但是它的工作方式是(唯一)吗?是否需要反转软件包名称以指定客户端中服务类的服务和端口名称? – arcy 2013-03-17 00:17:47