2013-03-17 27 views
0

我正在尝试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”;那个字符串应该是什么?

难道我的实现和我的接口是在不同的类吗?

我的客户不工作,我发布这个问题,但它很长,没有人回应。我在刺探理解这一部分;在我看来,这是最可能的罪魁祸首。如果我知道如何,我会删除其他问题。

+0

好吧,我得到了客户通过改变工作“ server.hw.demo“改为”hw“,这是我的界面的完整软件包名称。我仍然想知道什么是关系 - 示例代码需要一个包a.b.c,在“QName”中指定c.b.a - 我知道这是一个“约定”,但是它的工作方式是(唯一)吗?是否需要反转软件包名称以指定客户端中服务类的服务和端口名称? – arcy 2013-03-17 00:17:47

回答