我正在尝试 Apache 最简单的“Hello World”网络服务(http://cxf.apache.org/docs/a-simple-jax-ws-service.html);我特意对其进行了一些修改,以了解更多关于如何做事的信息,而不是仅仅复制他们的所有代码。
我的服务实现指定了它在包“hw”中实现的接口:
@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”;那个字符串应该是什么?
我的实现和我的接口在不同的类中是否重要?
我的客户不工作,我把它作为一个问题发布,但它很长,没有人回复它。我正在努力理解这部分;在我看来,这最有可能是罪魁祸首。如果我知道如何删除另一个问题。